簡體   English   中英

MongoDB 陣列內的 $project

[英]$project inside MongoDB array

我有 MongoDB 收集items與以下文件:

{
    data: [{"name": "First"}, {"name": "Second"}],
    data2: [{"value": 20}, {"value": 30}]
}

有沒有辦法將data2.value投影到同一索引上的data.value中? 我需要這個結果:

{
    data: [
        {"name": "First", value: 20},
        {"name": "Second", value: 30}
    ]
}

它想要這樣的東西:

db.items.aggregate([{"$project": {"data.X.value": "$data2.X.value", "data2": 0}}]) // Where X "iterate" over all indexes (so 0 and 1).

arrays datadata2的長度始終相同,但不必為 2。

你可以試試,

  • $map通過data數組的 object 循環遍歷 object
  • $indexOfArray獲取當前 object 的索引$$d
  • $arrayElemAt從特定$$d object 索引中獲取data2的元素value
db.collection.aggregate([
  {
    $project: {
      data: {
        $map: {
          input: "$data",
          as: "d",
          in: {
            name: "$$d.name",
            value: {
              $arrayElemAt: [
                "$data2.value",
                { $indexOfArray: ["$data", "$$d"] }
              ]
            }
          }
        }
      }
    }
  }
])

游樂場: https://mongoplayground.net/p/wv1vEVsrHeT

暫無
暫無

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

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