我有以下两个集合,我想在单个输出中查看项目的任务数。即一个项目可以包含许多任务。因此,如何检索项目总详细信息以及每个项目的任务数。
我尝试使用查找来联接,但是它在输出中将匹配的任务作为一个整体对象给出,但没有将任务数作为单个值获得。
预先感谢您的帮助!!
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}
]
答案 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"}
}
}])