我有一个类似于 收藏集1
{group_name: "group_1", key_name: "key_name_1"},
{group_name: "group_1", key_name: "key_name_2"},
{group_name: "group_2", key_name: "key_name_3"},
{group_name: "group_2", key_name: "key_name_4"},
{group_name: "group_2", key_name: "key_name_5"}
收藏2
{subtype: "A", key_name: "key_name_1"},
{subtype: "B", key_name: "key_name_1"},
{subtype: "A", key_name: "key_name_2"},
{subtype: "B", key_name: "key_name_2"},
{subtype: "C", key_name: "key_name_2"},
{subtype: "A", key_name: "key_name_3"},
{subtype: "A", key_name: "key_name_4"}
我希望每个组中有collection2
个对象。
我正在尝试使用聚合,如下所示:
db.collection1.aggregate([
{
$group : {
_id: "$group_name",
total : { $sum : db.collection2.find({key_name : "$key_name"}).count()}
}
}
])
预期输出:
{_id:"group_1",total:5},
{_id:"group_2",total:2}
实际输出:
{_id:"group_1",total:0},
{_id:"group_2",total:0}
注意:
db.collection1.aggregate([ { $group : { _id: "$group_name", total : { $sum : db.collection2.find({key_name : "key_name_1"}).count()} } } ])
以上代码产生了 以下预期的输出。
{_id:"group_1",total:4}, {_id:"group_2",total:6}
我需要pymongo
或mongoshell
中的解决方案。.
答案 0 :(得分:0)
这就是$lookup聚合的目的
db.collection1.aggregate([ {
$lookup:
{
from: "collection2",
localField: "key_name",
foreignField: "key_name",
as: "collection2_docs"
}
},{
$group : {
_id: "$group_name",
total : { $sum : { $size: "$collection2_docs" } }
}
}
])