【问题标题】:Mongo db query For join queriesMongodb查询对于连接查询
【发布时间】:2019-04-04 16:31:41
【问题描述】:

我有两个不同的对象

  1. 用户

  2. 用户组

用户

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

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

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


 }

用户组

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

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

【问题讨论】:

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


【解决方案1】:

您可以在 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。

【讨论】:

  • 我需要获取包含用户列表的用户组。在用户集合中,用户组在数组中。我尝试了您的示例得到错误“字段路径名可能不以 $ 开头”
  • 现在更新我的答案请测试。
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 2016-04-25
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多