加入两个集合并在Mongo DB中执行汇总和分组

时间:2019-07-01 10:42:40

标签: mongodb

我有以下两个集合,我想在单个输出中查看项目的任务数。即一个项目可以包含许多任务。因此,如何检索项目总详细信息以及每个项目的任务数。

我尝试使用查找来联接,但是它在输出中将匹配的任务作为一个整体对象给出,但没有将任务数作为单个值获得。

预先感谢您的帮助!!

Project collection:
{ "title":"Project1", "status":"not completed"}
{ "title":"Project2", "status":"completed"}

Task collection:
{ "projectTitle":"Project1", "task":"Task1"}
{ "projectTitle":"Project1", "task":"Task2"}

Expected Output:
[
    { "title":"Project1", "status":"not completed", "noOfTask":2},
    { "title":"Project2", "status":"completed", "noOfTask":0}
]

1 个答案:

答案 0 :(得分:1)

您可以在mongodb aggregation pipeline$lookup阶段尝试$project来实现这一目标。

您通过执行lookup集合中的task走在了正确的道路上。您只需要再添加一个$project阶段。这个想法是将noOfTasks投影为在size of array阶段返回的$lookup

尝试一下:

db.projects.aggregate([{
    $lookup : {
        from : "tasks",//name of your task collection
        localField : "title",
        foreignTitle : "projectTitle",
        as : "tasks"
    }
},{
    $project : {
        title : "$title",
        status : "$status",
        nofTask : {$size : "$tasks"}
    }
}])

详细了解$project$size