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

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

如何使用 C# MongoDB.Driver 更新深度嵌套的數組?

如何使用 C# MongoDB.Driver 更新深度嵌套的數組?

C#
臨摹微笑 2022-01-15 19:28:30
我有這樣的模型:{     "_id":"5b90eea8c02e062be2888446",   "storeGuid":"e97d4730-9b8a-49ed-be87-caf4054439aa",   "storeId":"0",   "storeDbName":"0",   "tenant":"dev",   "configGroup":[        {           "groupName":"peopleCounter",         "config":[              {                 "key":"averageWaitPeriodTime",               "value":"60",            }         ]      },      {           "groupName":"sessionMonitor",         "config":[              {                 "key":"testKey1",               "value":"987",            },            {                 "key":"testKey2",               "value":"123",            }         ]      }   ]}我正在嘗試value更新"key":"testKey2"我有這樣的更新聲明:await coll.UpdateOneAsync(    x => x.StoreGuid == storeGuid         && x.ConfigGroup.Any(y => y.GroupName == groupName                                   && y.Config.Any(z => z.Key == model.Key)),    Builders<StoreModel>.Update.Set(x => x.ConfigGroup[-1].Config[-1].Value, model.Value));例如,當我嘗試groupName使用此類過濾器進行更新時,ConfigGroup[-1]它可以工作。但是在我們擁有ConfigGroup[-1].Config[-1]它的情況下它不起作用。我知道如何更新值的兩個選項:只需使用更新整個列表 ConfigGroup[-1].Config或為過濾器指定具體索引,例如 ConfigGroup[configGroupIndex].Config[configKeyIndex].Value但我想知道為什么它不適用于-1索引。以及如何正確地做到這一點。請使用c# MongoDB.Driver回答。
查看完整描述

1 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

它不適用于乘法的原因是它與位置運算符'-1'相同。在“嵌套數組”主題下的官方文檔中,我們可以看到以下內容: $

位置 $ 運算符不能用于遍歷多個數組的查詢,例如遍歷嵌套在其他數組中的數組的查詢,因為 $ 占位符的替換是單個值

MongoDb 3.6 開始,有允許使用嵌套數組的新功能。

全位置運算符

過濾后的位置運算符

過濾位置運算符$[<identifier>]標識與更新操作的 arrayFilters 條件匹配的數組元素

因此,使用過濾后的位置運算符,我的代碼現在看起來像這樣:

await coll.UpdateOneAsync(x => x.StoreGuid == storeGuid,

    Builders<StoreModel>.Update.Set("configGroup.$[g].config.$[c].value", model.Value),

    new UpdateOptions

    {

        ArrayFilters = new List<ArrayFilterDefinition>

        {

            new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("g.groupName", groupName)),

            new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("c.key", model.Key))

        }

    });


查看完整回答
反對 回復 2022-01-15
  • 1 回答
  • 0 關注
  • 242 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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