1 回答

TA贡献1806条经验 获得超8个赞
当您尝试构建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 回答
- 0 关注
- 96 浏览
添加回答
举报