如何在一个MongoDB查询中连接两个集合



我有一个叫Param的模型,它与另一个叫Port的模型有关系。当我填充Param模型时,我可以访问所有Port属性。它有许多属性,但我将只指出那些必要的:

//Port 
{
username: 123556,
rxm_name: 'Name #2'
}

还有另一个不相关的集合Report,它具有以下属性:

//Report 
{
username: 123556,
box_number: 4423 
}

值得一提的是,Report集合中有近900.000个文档。box_number不是唯一的,但username是。此外,Port中的username-s可能存在于Report集合中。

我使用一个聚合函数来计数所有不同的唯一box_number-s。这将为每个box_number获得username-s的数量:

const totalUsers = await Report.aggregate([{
"$group": {
_id: {
"box_number": "$box_number",
},
count: {
$sum: 1
}
}
}]);

这个查询返回以下内容:

[
{
_id: {
box_number: 38032
}, 
count: 273
},
// and so on..
]

现在我必须执行一个查询链接usernamerxm_namebox_number。基本上,我必须显示每个box_number中有多少username-s,并按rxm_name对它们进行分组。我被困了几个小时,但我想不出这样的问题。我还遗漏了什么要点吗?

需要$lookup将两个集合链接到一个聚合命令中。以下是您可以使用的聚合:

db.Report.aggregate([
{
$lookup:
{
from: "Port",
localField: "username",
foreignField: "username",
as: "Report2"
}
},
{ $unwind : "$Report2" },
{
$group:
{
_id: { box_number: "$box_number", username: "$username" },
count: {
$sum: 1
},
rxm_name: { $addToSet: "$Report2.rxm_name" }
}
}
])

相关内容

  • 没有找到相关文章

最新更新