$ lookup mongodb错误的结果

时间:2018-12-18 10:12:55

标签: javascript mongodb

我正在使用 $ lookup 通过连接两个或三个集合中的数据来获取数据,以下是我的汇总查询。

let condition = {status:{$ne:config.PROJECT_STATUS.completed}, 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" } }
              },
              { 
                "$lookup": {
                "from": "projects",
                "let": { "projectId": "$_id" },
                "pipeline": [
                  { "$match": { "$expr": { "$eq": ["$_id", "$$projectId"] } } },
                  { 
                    "$lookup": {
                      "from": "users",
                      "let": { "developers": "$developers" },
                      "pipeline": [
                        { "$match": { "$expr": { "$in": ["$_id", "$$developers"] } } },
                        { "$project":{"firstName":1,"lastName":1}}
                      ],
                      "as": "developers"
                    }
                  },
                  { 
                    "$lookup": {
                      "from": "billing_accounts",
                      "let": { "upworkId": "$upworkId" },
                      "pipeline": [
                        { "$match": { "$expr": { "$eq": ["$_id", "$$upworkId"] } } },
                        {"$project":{"name":1,"username":1}}
                      ],
                      "as": "upworkId"
                    }
                  },
                  { 
                    "$project": { 
                      "projectName": 1, "upworkId": 1, "status": 1, "developers": 1,  "hoursApproved": 1
                    }
                  }
                ],
                "as": "project"
            }}
           ],
            "as": "projects"
          }
    }
])

它给了我以下结果:

[
    {
        "_id": "5c188a9959f6cf1258f4cb01",
        "projects": [
            {
                "_id": "5c188a9959f6cf1258f4cb01",
                "totalHours": 8,
                "project": [
                    {
                        "_id": "5c188a9959f6cf1258f4cb01",
                        "hoursApproved": 192,
                        "developers": [
                            {
                                "_id": "5c0a29e597e71a0d28b910aa",
                                "lastName": "kumar",
                                "firstName": "Amit"
                            }
                        ],
                        "projectName": "Jims fitness",
                        "status": "ongoing",
                        "upworkId": [
                            {
                                "_id": "5c17a1cec1a7681f7c54bb2d",
                                "name": "Heena Ln",
                                "username": "heena_ln"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "_id": "5c17a253c1a7681f7c54bb2f",
        "projects": []
    }
]

但是我想要得到的是:

[
        {
            "_id": "5c188a9959f6cf1258f4cb01",
            "projects": [
                {
                    "_id": "5c188a9959f6cf1258f4cb01",
                    "totalHours": 0,
                    "project": [
                        {
                            "_id": "5c188a9959f6cf1258f4cb01",
                            "hoursApproved": 192,
                            "developers": [
                                {
                                    "_id": "5c0a29e597e71a0d28b910aa",
                                    "lastName": "kumar",
                                    "firstName": "Amit"
                                }
                            ],
                            "projectName": "Project1",
                            "status": "ongoing",
                            "upworkId": [
                                {
                                    "_id": "5c17a1cec1a7681f7c54bb2d",
                                    "name": "Heena Ln",
                                    "username": "heena_ln"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "_id": "5c17a253c1a7681f7c54bb2f",
            "projects": [
             {
                    "_id": "5c17a253c1a7681f7c54bb2f",
                    "totalHours": 0,
                    "project": [
                        {
                            "_id": "5c17a253c1a7681f7c54bb2f",
                            "hoursApproved": 192,
                            "developers": [
                                {
                                    "_id": "5c0a29e597e71a0d28b910a9",
                                    "lastName": "kumar",
                                    "firstName": "Rajat"
                                }
                            ],
                            "projectName": "project2",
                            "status": "ongoing",
                            "upworkId": [
                                {
                                    "_id": "5c17a1cec1a7681f7c54bb2d",
                                    "name": "Heena Ln",
                                    "username": "heena_ln"
                                }
                            ]
                        }
                    ]
                }
             ]
        }
 ]

您会看到,现在我的 totalHours等于0 而不是空数组,并且具有项目详细信息

实际上我有四个集合:项目工作表用户帐单,并且我正在执行汇总查询在项目集合中以获取项目经理的项目,为此,我还加入了工作表集合以获取有关该员工工作了多少小时的数据,因为工作表集合包含projectId,userId和hours。

查询:您可以从结果中看到,我得到的项目为空数组,这是因为我在工作表集合中没有第二个项目projectId的任何记录,因此对于这给了我一个空数组,但我想按原样获取项目详细信息,并且totalHours等于0。

0 个答案:

没有答案