我如何在mongo集合中查询另一个集合

问题描述 投票:0回答:1

我有一个类似于集合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}

我需要pymongomongoshell中的解决方案。

mongodb mongodb-query pymongo
1个回答
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 } }
        } 
    } 
]) 
© www.soinside.com 2019 - 2024. All rights reserved.