簡體   English   中英

mongodb 從一個數組更新嵌套數組

[英]mongodb update nested array from a array

我在 mongodb 文檔中有一個數組。

 {
  _id: 1,
  jobs:[
   {
     _id:1,
     time: "08:00",
     status: "pending",
     user: 'user1'
   },
   {
     _id:2,
     time: "09:00",
     status: "pending",
     user: 'user1'
   },
   {
     _id:3,
     time: "07:30",
     status: "done",
     user: 'user2'
   }
]
}

現在我有一個像這樣更新的作業數組。

jobs:[
   {
     _id:1,
     time: "10:00",
     status: "done"
   },
   {
     _id:2,
     time: "11:00",
     status: "done"
   }
]

更新的文件應該是這樣的

{
  _id: 1,
  jobs:[
   {
     _id:1,
     time: "10:00", // updated
     status: "done" // updated
     user: 'user1'
   },
   {
     _id:2,
     time: "11:00", // updated
     status: "done", // updated
     user: "user1"
   },
   {
     _id:3,
     time: "07:30",
     status: "done",
     user: 'user2'
   }
]
}

我嘗試使用 update 和 $set 到目前為止沒有運氣

如何將更新數組中的唯一值更新到 mongodb 文檔中? 提前致謝

一種選擇是使用帶有管道的更新:

  1. 將新數據作為newData添加到文檔中
  2. 使用$map遍歷jobs項目,對於每個項目,將其與newData中的匹配項目合並。
db.collection.update(
  {_id: 1},
  [{$addFields: {
      newData: [
        {_id: 1, time: "10:00", status: "done"},
        {_id: 2, time: "11:00", status: "done"}
      ]
    }
  },
  {$project: {
      jobs: {
        $map: {
          input: "$jobs",
          in: {
            $mergeObjects: [
              "$$this",
              {$arrayElemAt: ["$newData", {$indexOfArray: ["$newData._id", "$$this._id"]}]}
            ]
          }
        }
      }
    }
  }
])

看看它在操場上的例子是如何工作的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM