sql >> Database teknologi >  >> NoSQL >> MongoDB

Udtrykstræ er ikke understøttet på UpdateOneAsync

Problemet starter, når du forsøger at bygge din Update udmelding. Som du sikkert ved -1 bestået som et indeks vil være oversat til $ positional operator . dokumentationen siger det

Derudover forsøger du at opbygge din filtreringstilstand ved hjælp af SingleOrDefault og .NET MongoDB-driveren er ikke i stand til at oversætte det til nogen MongoDB-forespørgselssyntaksoperator.

Hvordan løser man det?

I stedet for at bruge positionsoperatoren kan du prøve at bruge positionelt filtreret operator syntaks.

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. Hent indeks over element i array i MongoDB

  2. Mongo-aggregering inden for tidsintervaller

  3. Hvordan søger jeg efter en streng i et MongoDB-dokumentarray og projicerer matrixværdien i en søgeoperation?

  4. Hvordan gemmer jeg blob-data i MongoDB?