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 關注
- 113 瀏覽
添加回答
舉報