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

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

Mongodb更新深層嵌套的子文檔

Mongodb更新深層嵌套的子文檔

蝴蝶不菲 2019-09-21 13:57:56
我有一個深層嵌套的文檔結構,如下所示:{id: 1,  forecasts: [ {              forecast_id: 123,              name: "Forecast 1",              levels: [                 { level: "proven",                   configs: [                            {                               config: "Custom 1",                              variables: [{ x: 1, y:2, z:3}]                            },                             {                               config: "Custom 2",                              variables: [{ x: 10, y:20, z:30}]                            },                     ]                },                 { level: "likely",                   configs: [                            {                               config: "Custom 1",                              variables: [{ x: 1, y:2, z:3}]                            },                             {                               config: "Custom 2",                              variables: [{ x: 10, y:20, z:30}]                            },                     ]                }            ]        },     ]}我正在嘗試更新集合以插入新的配置,如下所示:newdata =  {  config: "Custom 1",   variables: [{ x: 111, y:2222, z:3333}]}我正在mongo中嘗試這樣的事情(在Python中):db.myCollection.update({"id": 1,                         "forecasts.forecast-id": 123,                         "forecasts.levels.level": "proven",                         "forecasts.levels.configs.config": "Custom 1"                         },                         {"$set": {"forecasts.$.levels.$.configs.$": newData}}                      )我收到“無法在沒有包含數組的相應查詢字段的情況下應用位置運算符”錯誤。在mongo中執行此操作的正確方法是什么?這是mongo v2.4.1。
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

不幸的是,$每個鍵不能多次使用運算符,因此其余部分必須使用數字值。如:


db.myCollection.update({

    "id": 1, 

    "forecasts.forecast-id": 123, 

    "forecasts.levels.level": "proven", 

    "forecasts.levels.configs.config": "Custom 1"

  },

  {"$set": {"forecasts.$.levels.0.configs.0": newData}}

)

MongoDB對更新嵌套數組的支持很差。因此,如果您需要經常更新數據,則最好避免使用它們,并考慮改用多個集合。


一種可能:創建forecasts自己的集合,并假設您具有一組固定的level值,則創建level一個對象而不是一個數組:


{

  _id: 123,

  parentId: 1,

  name: "Forecast 1", 

  levels: {

    proven: { 

      configs: [

        { 

          config: "Custom 1",

          variables: [{ x: 1, y:2, z:3}]

        }, 

        { 

          config: "Custom 2",

          variables: [{ x: 10, y:20, z:30}]

        }, 

      ]

    },

    likely: {

      configs: [

        { 

          config: "Custom 1",

          variables: [{ x: 1, y:2, z:3}]

        }, 

        { 

          config: "Custom 2",

          variables: [{ x: 10, y:20, z:30}]

        }, 

      ]

    }

  }

}

然后,您可以使用以下命令進行更新:


db.myCollection.update({

    _id: 123,

    'levels.proven.configs.config': 'Custom 1'

  },

  { $set: { 'levels.proven.configs.$': newData }}

)


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 2089 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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