亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UpdateOneAsync 不支持表達式樹

UpdateOneAsync 不支持表達式樹

C#
智慧大石 2022-12-04 10:38:19
在調用 UpdateOneAsync 時,使用此包裝器:    public async Task<UpdateResult> UpdateDocument<T>(        string sCollectionName,         Expression<Func<T, bool>> filter,         UpdateDefinition<T> update,        bool bUpsert,        System.Threading.CancellationToken cancellationToken        )    {        IMongoDatabase db = _mongoClient.GetDatabase(_optionsMonitor.CurrentValue.databasename);        IMongoCollection<T> collection = db.GetCollection<T>(sCollectionName);        return await collection.UpdateOneAsync<T>(filter, update, new UpdateOptions() { IsUpsert = bUpsert }, cancellationToken);    }像這樣:private async Task<Models.Errors> UpdateDbOnSyncServerToBoardUpdate(        CancellationToken cancel,        MongoDB.Bson.BsonDocument bsonDocConfigurationToUpdate,        DateTime dtUpdated,        string sId,        int iObjectId,        string sAppName,        string sModelName        )    {        MongoDB.Driver.UpdateResult updateResult = null;        Models.Errors errors = null;        try        {            updateResult = await _db.UpdateDocument<Models.Database.NodeBoardModel>(                Constants.NodeBoardCollectionName,                node => node.Id == sId && 我收到 NotSupportedException:不支持表達式樹:{document}{RemoteBoard}{apps}.SingleOrDefault(app => (app.appname == "eACM")).objects.SingleOrDefault(model => (model.name == "tag" )).config_docs我感覺我以錯誤的方式或以 MongoDb 不支持的方式使用 LINQ 關鍵字,但很難準確判斷問題出在哪里。
查看完整描述

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


查看完整回答
反對 回復 2022-12-04
  • 1 回答
  • 0 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號