首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDb:聚合$lookup

MongoDb:聚合$lookup
EN

Stack Overflow用户
提问于 2021-11-28 13:34:10
回答 2查看 71关注 0票数 1

给定以下集合。我必须获取title字段并合并到标识符

凭据:

代码语言:javascript
复制
{
    _id: ..
    title: ..
}

USER_CREDENTIAL:

代码语言:javascript
复制
{
    _id: ..
    credential_id: .. (from credential collection)
    created_at: ..
    identifier: {
        first_name: ..
        middle_name: ..
        last_name: ..
    }
}

响应应该是:

代码语言:javascript
复制
{
   user_credential_id: 
   member: {
        first_name:
        middle_name:
        last_name:
        title:
        created_at:
    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-11-28 14:02:56

  1. $lookup -使用管道连接useruser_credential_id以匹配条件($match),并修饰文档
    1. $lookup-反构造多个($project).
    2. $unwind -修饰输出文档的$match数组。

代码语言:javascript
复制
db.user.aggregate([
  {
    "$lookup": {
      "from": "user_credential",
      let: {
        "user_credential_id": "$_id",
        "title": "$title"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$credential_id",
                "$$user_credential_id"
              ]
            }
          }
        },
        {
          $project: {
            first_name: "$identifier.first_name",
            middle_name: "$identifier.middle_name",
            last_name: "$identifier.last_name",
            title: "$$title",
            created_at: "$created_at",
            
          }
        }
      ],
      "as": "member"
    }
  },
  {
    $unwind: "$member"
  },
  {
    $project: {
      _id: 0,
      user_credential_id: "$_id",
      member: 1
    }
  }
])

Sample Mongo Playground

票数 0
EN

Stack Overflow用户

发布于 2021-11-28 14:05:52

您可以尝试此查询

代码语言:javascript
复制
db.user.aggregate([
  {
    $lookup: {
      from: "credentials",
      localField: "credential_id",
      foreignField: "_id",
      as: "user_credential"
    }
  },
  {
    $unwind: "$user_credential"
  },
  {
    $project: {
      _id: 0,
      user_credential_id: "$credential_id",
      member: {
        first_name: "$identifier.first_name",
        middle_name: "$identifier.middle_name",
        last_name: "$identifier.last_name",
        title: "$user_credential.title",
        created_at: "$created_at",
        
      }
    }
  }
])

你可以在here上查看

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70143911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档