【问题标题】:Mongodb Aggregation Pipeline limit $lookup fieldsMongodb 聚合管道限制 $lookup 字段
【发布时间】:2018-08-06 11:18:20
【问题描述】:

我有两个集合,我试图将它们聚合在一起以产生以下所需的输出,但我正在努力解决如何限制查找返回的数组中的字段。任何帮助将不胜感激。

project
{
    _id: ObjectId("ABC")    
    projectName: "Project One"
}

user
{
    _id: ObjectId("...")
    email: "test1@test.co.uk",
    firstname: "Test1",
    lastname: "Record",
    project: [{projectId: ObjectId("ABC")}]
},
{
    _id: ObjectId("...")
    email: "test2@test.co.uk",
    firstname: "Test2",
    lastname: "Record",
    project: [{projectId: ObjectId("ABC")}, {projectId: ObjectId("DEF")}]
}

想要的输出

{
    projectName: "Project One"
    userDetail: [{firstname: "Test1",lastname: "Record"}, 
            {firstname: "Test2",lastname: "Record"}]        
}

目前的工作

db.project.aggregate([{$match: {_id: ObjectId("ABC")}} 
,  {$lookup: {
                from: "user",
                localField: "_id",
                foreignField: "project.projectId",
                as: "userDetail"
            }
} 
, {$project: {_id: 1, projectName: 1}}
]).pretty()

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    使用$map$project 阶段映射您选择的字段。

    {
      "$project":{
        "projectName":1,
        "userDetail":{
          "$map":{
            "input":"$userDetail",
            "as":"ud",
            "in":{
              "firstname":"$$ud.firstname",
              "lastname":"$$ud.lastname"
            }
          }
        }
      }
    }   
    

    【讨论】:

      【解决方案2】:
      db.project.aggregate([{$match: {_id: ObjectId("ABC"),}} , 
      {$lookup: {
                  from: "user",
                  localField: "_id",
                  foreignField: "project.projectid",
                  as: "userDetail"
              }
      }, {$project: {_id: 1, projectName:1,"userDetail.firstname":1,"userDetail.lastname":1}}
      ]).pretty()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 2018-04-26
        • 2020-08-12
        • 2022-01-05
        • 2014-08-26
        • 2018-07-21
        • 1970-01-01
        相关资源
        最近更新 更多