【问题标题】:Populate nested array objects using aggregate in mongodb在 mongodb 中使用聚合填充嵌套数组对象
【发布时间】:2021-07-18 01:04:32
【问题描述】:

我试图在使用聚合 $lookup 后填充第二个嵌套数组。

这是我原来的数组。

 {
    "_id" : ObjectId("607da9c0c7cb26384c7810a6"), 
    "date" : ISODate("2021-04-20T00:00:00.000+0000"), 
    "clientID" : "601e6dc61766587af8ce76db", 
    "medications" : [
        {
            "_id" : ObjectId("6065de3aa95e721f587f7528")
        }, 
    ]
}
{
   from: "medications",
   localField: "medications._id",
   foreignField: "_id",
   as: "medications",
}

使用聚合 $lookup 后,我得到了这个结果,但我仍然有需要填充的嵌套数组“库存”。我尝试添加另一个 $lookup 管道,但我不知道如何正确执行此操作。

{
    "_id" : ObjectId("607da9c0c7cb26384c7810a6"), 
    "date" : ISODate("2021-04-20T00:00:00.000+0000"), 
    "clientID" : "601e6dc61766587af8ce76db", 
    "medications" : {
        "_id" : ObjectId("6065de3aa95e721f587f7528"), 
        "medication": "med 1"
        "schedule": ["9am", "10pm"]
        "inventory":  "ObjectId("6076d55ab6aeb947dca85877")"
    }
}

这是库存物品

{
   "_id" : ObjectId("6076d55ab6aeb947dca85877"), 
   "item": "Inventory item 1",
   "Qty": "10"
}

预期输出

{
    "_id" : ObjectId("607da9c0c7cb26384c7810a6"), 
    "date" : ISODate("2021-04-20T00:00:00.000+0000"), 
    "clientID" : "601e6dc61766587af8ce76db", 
    "medications" : {
        "_id" : ObjectId("6065de3aa95e721f587f7528"), 
        "medication": "med 1"
        "schedule": ["9am", "10pm"]
        "inventory":  {
              "_id" : ObjectId("6076d55ab6aeb947dca85877"), 
              "item": "Inventory item 1",
              "Qty": "10"
         }
    }
}

【问题讨论】:

    标签: mongodb aggregate


    【解决方案1】:

    你可以试试这个,或者使用人口。

    {
       from: "medications",
       localField: "medications._id",
       foreignField: "_id",
       as: "medications",
    }
    , {
      $unwind: {
        path: "$medications",
        preserveNullAndEmptyArrays: true
      }
    }, {
      $lookup: {
        from: "inventory",
        localField: "inventory._id",
        foreignField: "_id",
        as: "medications.inventory",
      }
    }
    

    您可以查看官方文档中的 $unwind。只需注意适当的localFieldforeignField

    【讨论】:

    • 有没有其他方法可以扩展多个嵌套引用。 Cz 编写 4 或 5 次查找代码只是为了扩展嵌套引用很奇怪。
    猜你喜欢
    • 2021-05-23
    • 2020-07-30
    • 2018-09-10
    • 2015-03-10
    • 2021-08-13
    • 2020-04-23
    • 2020-01-24
    • 2022-11-10
    • 2017-07-26
    相关资源
    最近更新 更多