如何解决引用与现有馆藏不同的馆藏,并从同一馆藏开始计数
我必须收集A和B,其中A的文档包含对象ID,这些ID在B的字段中心和gcentre中存在。我目前正在通过从集合A的对象ID到B引用,然后引用gcentre的ID查找子项和中心并计算通过javascript后处理分配的文档,来输出包含父中心名称的结果。作为聚合管道的新手,我不知道如何通过对象ID和这种记录计数来进行引用。聚合管道可能吗?我已经尝试过$ lookup,但是它似乎没有提供预期的输出。
集合A中的文档:
{
"_id": {
"$oid": "5bbafa98d8c77251bea30f8c"
},"parentCentre": {
"$oid": "1cbafa99d8c77251bea30f11"
},"childCentre": {
"$oid": "5cbafa99d8c77251bea30f8d"
},},{
"_id": {
"$oid": "5bbafa98d8c77251bea30f8c"
},"parentCentre": {
"$oid": "1cbafa99d8c77251bea30f21"
},"childCentre": {
"$oid": "5cbafa99d8c77251bea30f6d"
},}
集合B中的文档:
{
"_id": {
"$oid": "1cbafa99d8c77251bea30f11"
},"Type": "Parent","Name": "Kris Labs"
},{
"_id": {
"$oid": "1cbafa99d8c77251bea30f21"
},"Name": "DEX Labs"
},{
"_id": {
"$oid": "5cbafa99d8c77251bea30f8d"
},"Type": "Child","Name": "Mili Labs"
},{
"_id": {
"$oid": "5cbafa99d8c77251bea30f6d"
},"Name": "Max Labs"
}
结果:
{
"parentCentreName":"Kris Labs","Records":{
{
childCentreName: "Max Labs",recordCount: 3
}
}
},{
"parentCentreName":"DEX Labs","Records":{
{
childCentreName: "Mili Labs",recordCount: 1
}
}
}
解决方法
您可以使用以下聚合查询:
db.A.aggregate([
{
$group: {
_id: {
p: "$parentCentre",c: "$childCentre"
},count: {
$sum: 1
}
}
},{
$group: {
_id: "$_id.p",Records: {
$push: {
childCentreName: "$_id.c",recordCount: "$count"
}
}
}
},{
$unwind: "$Records"
},{
"$lookup": {
"from": "B","localField": "_id","foreignField": "_id","as": "p"
}
},"localField": "Records.childCentreName","as": "c"
}
},{
$unwind: "$c"
},{
$unwind: "$p"
},{
$project: {
"parentCentreName": "$p.Name","Records.childCentreName": "$c.Name","Records.recordCount": 1,_id: 0
}
},{
$group: {
_id: "$parentCentreName","Records": {
$push: "$Records"
}
}
},{
$project: {
"parentCentreName": "$_id","Records": 1,_id: 0
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。