mongodb - 聚合 3 个集合后,mongoDB 计数不同的对象
问题描述
MongoShell 版本 4.0.2
我有 3 个集合之间的数据相关性
乙:
{
"_id" : ObjectId("5b8f83fb520b3ea906ac11d1"),
"X" : "002100367752",
"Z" : "002KV180054605",
}
A :
{
"_id" : ObjectId("5b8f83fa520b3e09e7ac0de1"),
"Y" : "002100367752"
}
C :
{
"_id" : ObjectId("5b8f83fb520b3e0127ac15b9"),
"N" : "002KV180054605",
"Q" : 17,
"W" : 1,
"E" : 35
}
连接如下所示:
Collection A <> Collection B <> Collection C
仅在 Collection BI 中具有来自所有 3 个集合的对象的 ID
现在,我想计算集合 A 中通过集合 B 连接到集合 C 中具有特定参数的对象的不同数量的对象。
这意味着我的计数应该返回集合 A 中的不同对象的数量,这些对象可以与集合 C 中的对象有多个连接
如果我像下面这样查询,我没有得到任何结果:
db.B.aggregate([
{
$lookup:
{
from: "A",
localField: "X",
foreignField: "Y",
as: "Acc"
}
},
{
$match: { "Acc": { $ne: [] } }
},
{
$lookup:
{
from: "C",
localField: "Z",
foreignField: "N",
as: "Con"
}
},
{
$match: { "Con": { Q: 1, W: 1, E: 9 } }
}
])
另外,我不知道如何计算这个查询
解决方案
我认为这是我的解决方案:
db.idlsfcontractroles.aggregate([
{"$lookup":{
"from":"idlsfcontracts",
"localField":"Contract__r_ExternalId__c",
"foreignField":"ExternalId__c",
"as":"Con"
}},
{"$unwind":"$Con"},
{"$match":{"Con.Status__c":1,"Con.Type__c":1,"Con.ConductingCompany__c":31}},
{"$group":{"_id": null, uniqueValues: {$addToSet: "$Account__r_MDMExternalId__c"}}},
{"$project": {"_id": 1, numberOfParties: { $size: "$uniqueValues" }}}
])
推荐阅读
- c# - 打包 React 组件以在其他 Visual Studio 2017 MVC 项目中重用
- r - 如何为每一列重复计算?
- oracle - 如何在 pl/sql 包中定义 dbms_scheduler.create_job?
- c# - UWP:无法在列表视图上加载图像
- node.js - AWS Lambda 没有触发 nodejs 请求模块
- php - guzzle 从响应中读取值
- angular - 如何将正常的 for 循环复制到 *ngFor
- python - Python Pandas,删除 NaN
- scala - 如何测试偏移量是否已提交给 Kafka
- azure-devops - Azure DevOps 发布进度视图未打开