【问题标题】:Merge two collections in mongodb aggregation based on a value [duplicate]根据值合并mongodb聚合中的两个集合[重复]
【发布时间】:2020-04-25 04:40:33
【问题描述】:

有两个集合

contact_details :

{_id:ObjectId("abcd1234"),
name:"elmaro",
email:"elmaro@gmail.com"}

loaction_details:

{_id:ObjectId("aasd234gas"),
contact_id:ObjectId("abcd1234"),
location:"Ohio"}

如何使用聚合函数将数据转换成this

合并数据:


{contact_id:ObjectId("abcd1234"),
location:"Ohio",
name:"elmaro",
email:"elmaro@gmail.com"}

【问题讨论】:

    标签: mongodb aggregation-framework aggregate-functions


    【解决方案1】:

    您需要使用$lookup 运算符加入contact_detailsloaction_details 集合并使用$project 转换结果。

    db.contact_details.aggregate([
        {$lookup:{
             from:"loaction_details",
             localField:"_id",
             foreignField:"contact_id",
             as : "location"
         }},
         {$unwind:"$location"},
         {$project:{
             _id:0,
             name:1,
             email:1,
             contact_id:"$location.contact_id",
             location:"$location.location"
          }}
    ])
    

    【讨论】:

    • 如果 location_details 集合中的每个文档都存在于 contact_details 集合中,这将正常工作。否则,您应该使用带有 preserveNullAndEmptyArrays 选项的 $unwind。如果有任何文档在 location_details 中没有匹配项,则在展开数组后,此选项将在结果中保留该文档。否则,这些文档将被从结果中跳过。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多