Mongo数据库查询对于联接查询

时间:2018-10-31 13:28:30

标签: mongodb spring-boot spring-data-jpa

我有两个不同的对象

  1. 用户

  2. UserGroup

用户

{
          _id:1,
          Name:'name',
          Usergroup:
      [

                        {
                                '$ref' : 'UserGroup',
                                '$id' : 1
                         },

                         {
                                '$ref' : 'UserGroup',
                                '$id' : 2
                        }]


 }

用户组

{
                         _id:1,
                          name: 'admin'
                  },{
                        _id:2,
                         name: 'admin1'
 }

我需要获取用户组集合以及用户列表,任何人都可以帮助我编写连接查询。

1 个答案:

答案 0 :(得分:0)

您可以在mongo中使用$lookup来加入两个集合。

  db.user_collection_name.aggregate(
{
    $project: { 
        group_id: {
          $map: { 
             input: { 
                  $map: {
                      input:"$userGroup",
                      in: {
                           $arrayElemAt: [{$objectToArray: "$$this"}, 1]
                      },
                  }
             },
             in: "$$this.v"}},
             "name":1
        }
}, 
    {$lookup:
         {
           from: userGroup_collection_name,
           localField: "group_id",
           foreignField: _id,
           as: users
         }
    })

说明:
在聚合器中,可以将DBRef BSON类型像对象一样处理,具有两个或三个字段(ref,id和DB)。因此,我们需要抽象键,即来自dbref字段的值。因此,我们需要$project函数来获取Id,然后我们才能$lookup使用该ID。