sql >> Databasteknik >  >> NoSQL >> MongoDB

Uttrycksträd stöds inte på UpdateOneAsync

Problemet börjar när du försöker bygga din Update påstående. Som du säkert vet -1 skickas som ett index kommer att översatt till $positionsoperatören . dokumentationen säger det

Dessutom försöker du bygga ditt filtreringsvillkor med SingleOrDefault och .NET MongoDB-drivrutinen kan inte översätta det till någon MongoDB-frågesyntaxoperator.

Hur fixar man det?

Istället för att använda positionsoperatorn kan du prova att använda den positionsfiltrerade operatorn syntax.

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-aggregation per dag baserat på unix-tidsstämpel

  2. Ionic2 + Meteor:få _id för nytt infogat objekt

  3. En publikation döljer kapslade fält från en annan publikation

  4. Hur man skapar mongoose-schema med en mängd objekt