sql >> Database >  >> NoSQL >> MongoDB

Expressiestructuur wordt niet ondersteund op UpdateOneAsync

Het probleem begint wanneer u uw Update probeert te bouwen uitspraak. Zoals je waarschijnlijk weet -1 doorgegeven als index wordt vertaald naar de $ positionele operator . De documentatie zegt dat

Bovendien probeert u uw filtervoorwaarde op te bouwen met behulp van SingleOrDefault en het .NET MongoDB-stuurprogramma kan dat niet vertalen in een MongoDB-querysyntaxisoperator.

Hoe dit op te lossen?

In plaats van de positionele operator te gebruiken, kunt u proberen de positioneel gefilterde operator te gebruiken syntaxis.

var filter = Builders<NodeBoardModel>.Filter.Eq(f => f.Id, sId);
var update = Builders<NodeBoardModel>.Update.Set("RemoteBoard.apps.$[app].objects.$[object].config_docs.$[configdoc].config_dt", dtUpdated);

var arrayFilters = new List<ArrayFilterDefinition>();
ArrayFilterDefinition<BsonDocument> appFilter = new BsonDocument("app.appname", new BsonDocument("$eq", sAppName));
ArrayFilterDefinition<BsonDocument> objectFilter = new BsonDocument("object.name", new BsonDocument("$eq", sModelName));
ArrayFilterDefinition<BsonDocument> configDocFilter = new BsonDocument("configdoc.config_id", new BsonDocument("$eq", iObjectId));

arrayFilters.AddRange(new[] { appFilter, objectFilter, configDocFilter });

var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters };

var res = Col.UpdateOne(filter, update, updateOptions);



  1. MongoDB - Maak een back-up

  2. Mongoose vind array met $in

  3. MongoDB:efficiënt schema-ontwerp met ingesloten documenten

  4. Open Redis-poort voor externe verbindingen