sql >> Base de Datos >  >> NoSQL >> MongoDB

El árbol de expresión no es compatible con UpdateOneAsync

El problema comienza cuando intenta construir su Update declaración. Como probablemente sepa -1 pasado como índice será traducido al $ operador posicional . La documentación dice que

Además, está intentando crear su condición de filtrado usando SingleOrDefault y el controlador .NET MongoDB no puede traducir eso a ningún operador de sintaxis de consulta MongoDB.

¿Cómo arreglar eso?

En lugar de usar el operador posicional, puede intentar usar el operador posicional filtrado sintaxis.

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);