簡體   English   中英

MongoDB:使用 $lookup localField 刪除數組中的字段

[英]MongoDB: Remove field in array with $lookup localField

我是 MongoDB 的初學者。 我在aggregation使用$lookup並使用localField來獲取參考文檔。

db.orders.insert([
   { "_id" : 1, "item" : ['almonds','pecans','bread'], "price" : 12, "quantity" : 2 },
   { "_id" : 2, "item" : ['cashews','catty'], "price" : 20, "quantity" : 1 }
])

我嘗試在aggregation使用$lookuplocalField但我找不到刪除字段_iddescription

db.inventory.insert([
   { "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 },
   { "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 },
   { "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 },
   { "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 },
   { "_id" : 5, "sku": "catty", description: "Incomplete", "instock" : 100 },
   { "_id" : 6 }
])

預期成績:

[
   {
    "_id" : 1,
    "item" : [
        { "sku" : "almonds", "instock" : 120 },
        { "sku" : "pecans", "instock" : 70 },
        { "sku" : "bread", "instock" : 80 }
    ],
    "price" : 12,
    "quantity" : 2
    },
   {
    "_id" : 2,
    "item" : [
        { "sku" : "cashews", "instock" : 60 },
        { "sku" : "catty", "instock" : 100 }
    ],
    "price" : 20,
    "quantity" : 1
    }
]

您可以嘗試使用聚合管道查找

  • $lookup加入庫存收集
  • $matchitem數組中的庫存sku
  • $project顯示必填字段
db.orders.aggregate([
  {
    $lookup: {
      from: "inventory",
      as: "item",
      let: { i: "$item" },
      pipeline: [
        { $match: { $expr: { $in: ["$sku", "$$i"] } } },
        {
          $project: {
            _id: 0,
            sku: 1,
            instock: 1
          }
        }
      ]
    }
  }
])

操場

暫無
暫無

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

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