MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Дървото на изразите не се поддържа в UpdateOneAsync

Проблемът започва, когато се опитвате да изградите своя Update изявление. Както вероятно знаете -1 предаван като индекс ще бъде преведен към $ позиционен оператор . документация казва това

Освен това се опитвате да изградите своето условие за филтриране, като използвате SingleOrDefault и драйверът на .NET MongoDB не може да преведе това в който и да е оператор на синтаксис на заявка MongoDB.

Как да поправя това?

Вместо да използвате позиционния оператор, можете да опитате да използвате позиционно филтриран оператор синтаксис.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spark - Как да създадете променлива, която е различна за всеки контекст на изпълнител?

  2. Проверете дали полето съществува в поддокумент на масив

  3. Защо набор от реплики на mongodb изисква нечетен брой възли за гласуване?

  4. Групиране на документи в MongoDB при специално условие

  5. Изтриването на (издърпване) на документ в масив от Mongoose не работи с ObjectID