sql >> Databáze >  >> NoSQL >> MongoDB

Strom výrazů není na UpdateOneAsync podporován

Problém začíná, když se pokoušíte vytvořit Update tvrzení. Jak pravděpodobně víte -1 předán jako index bude přeloženo na $ pozičního operátora . dokumentace říká, že

Navíc se pokoušíte vytvořit podmínku filtrování pomocí SingleOrDefault a ovladač .NET MongoDB to nedokáže přeložit do žádného operátora syntaxe dotazu MongoDB.

Jak to opravit?

Místo použití pozičního operátoru můžete zkusit použít polohově filtrovaný operátor syntaxe.

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. Programově aktualizujte pole v Mongo a Meteor

  2. Chcete používat DB s povoleným žurnálováním v 32bitovém systému-MongoDB

  3. TypeError:Nelze přečíst vlastnost 'items' null v monogdb pomocí nodejs

  4. MongoDB $setIntersection