【问题标题】:Populate field in aggregation mongodb在聚合 mongodb 中填充字段
【发布时间】:2018-12-11 16:14:41
【问题描述】:

我正在使用以下聚合查询从两个集合中获取数据:

let condition = {assignId:mongoose.Types.ObjectId(req.params.id)};
Project.aggregate([
    {
      $match: condition  
    },
    {
      "$group":{
        "_id": "$_id"
      }
    },
    { 
      "$lookup": {
        "from": "worksheets",
        "let": { "projectId": "$_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": [ "$projectId", "$$projectId" ] }}},
          { "$group": {_id:"$projectId", totalHours:{"$sum": "$hours"}}}
        ],
        "as": "project"
      }
    }
])
.then((data)=>{
    res.json(data);
})

并得到以下结果:

[
 {
    "_id": "5c0a4083753a321c6c4ee024",
    "project": [
        {
            "_id": "5c0a4083753a321c6c4ee024",
            "totalHours": 10
        }
    ]
 },
 {
    "_id": "5c0a2a8897e71a0d28b910ac",
    "project": [
        {
            "_id": "5c0a2a8897e71a0d28b910ac",
            "totalHours": 6
        }
    ]
 }
]

我想填充项目数组中的 _id 字段。我应该为此做哪些改变?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    你可以使用下面的聚合

    Project.aggregate([
      { "$match": condition },
      { "$group":{ "_id": "$_id" }},
      { "$lookup": {
        "from": "worksheets",
        "let": { "projectId": "$_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": [ "$projectId", "$$projectId" ] }}},
          { "$group": {_id:"$projectId", totalHours:{"$sum": "$hours"}}},
          { "$lookup": {
            "from": "projects",
            "let": { "projectId": "$_id" },
            "pipeline": [
              { "$match": { "$expr": { "$eq": [ "$_id", "$$projectId" ] }}},
              { "$project": { "projectName": 1 }}
            ],
            "as": "project"
          }}
        ],
        "as": "worksheet"
      }}
    ])
    

    【讨论】:

    • 如果我想获取特定字段怎么办?
    • 使用$project 阶段并指定所需的字段。正如我在第二个$lookup 中所做的那样。 { "$project": { "projectName": 1 }}
    • 我在项目字段中有一个开发者数组。我也想填充它。
    • 在pipeline 中再使用一个$lookup。
    • 我在下面做了,得到了开发者数组 = [] 和 _id = null。
    猜你喜欢
    • 2021-02-16
    • 2020-08-19
    • 2021-10-22
    • 1970-01-01
    • 2023-03-26
    • 2021-04-21
    • 2021-04-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多