首页 > 解决方案 > 如何在 MongoDB 中执行联接(在 SQL 中类似)?

问题描述

假设我们有两个collections(用户和数据),需要从用户和数据集合中提取每个 user_id 的所有数据。

users
     {user_id: 1, username: tom, userage: 27}
     {user_id: 2, username: sam, userage: 25}

data
     {workexp: 4, skill: testing, user_id: 1}
     {workexp: 9, skill: devops, user_id: 2}

请告诉我我们如何在 mongo 中执行此操作。

标签: mongodbjoin

解决方案


您可以使用运算符加入集合lookup

在此处阅读文档: https ://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

例子:

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

在你的情况是这样的:

db.users.aggregate([
    {
        $lookup: {
           from: "data",
           localField: "user_id",
           foreignField: "user_id",
           as: "user_data"
        }
    }])

这将返回此 JSON 对象:

{
    "_id" : ObjectId("5ba0bace2fd0cdd3eae35df6"),
    "user_id" : 1,
    "username" : "tom",
    "userage" : 27,
    "user_data" : [ 
        {
            "_id" : ObjectId("5ba0bafe2fd0cdd3eae35e16"),
            "workexp" : 4,
            "skill" : "testing",
            "user_id" : 1
        }
    ]
}

推荐阅读