MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

A árvore de expressão não é compatível com UpdateOneAsync


O problema começa quando você está tentando construir seu Update declaração. Como você provavelmente sabe -1 passado como índice será traduzido para o operador posicional $ . A documentação diz que

Além disso, você está tentando criar sua condição de filtragem usando SingleOrDefault e o driver .NET MongoDB não é capaz de traduzir isso em nenhum operador de sintaxe de consulta do MongoDB.

Como consertar isso?

Em vez de usar o operador posicional, você pode tentar usar o operador filtrado posicional sintaxe.
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);