2013-06-24 98 views
1

我有两个集合,建筑物和订单。建筑物可以有许多订单(1:N关系)。 我试图用聚合框架实现“十大统计”(哪些建筑物的订单数量最多)。 我的问题是,我如何获得每个建筑物的总订单?有没有办法在一个聚合中“混合”来自两个集合的数据?MongoDB聚合关系计数关系

我目前正在做这样的事情:

db.buildings.aggregate([ 
         { $group : _id : { street : "$street", 
              city : "$city", 
              orders_count : "$orders_count" }}, 
         { $sort : { _id.orders_count : -1 }}, 
         { $limit : 10} 
         ]); 

但是,在这种情况下,“ORDERS_COUNT”是预先计算的值。它可以工作,但效率很低,并且会减慢“实时”聚合。

有没有一种方法可以直接在聚合中统计每个建筑物的相关订单(确定有办法...)?

非常感谢

+2

聚集只能在单个集合上运行 - 为什么不查询订单集合中的这些信息?订单中是否包含关于哪个建筑物的信息?如果你添加什么订单文件看起来也许我们可以建议具体的聚合。 –

+0

我在建筑物上做过这个,因为我也需要这个colllection的信息。订单有building_id。 – patrickkeller

回答

0

你不说,单是如何与模式中的建筑物,但如果订单有建筑ID或命名引用,只是组由:

db.orders.aggregate({ $group : { _id: "$buildingId", 
            sum: {$sum:1} 
           } 
        }, 
        /* $sort by sum:-1, $limit:10 like you already have */ 
) 
+0

谢谢。看来这是做到这一点的唯一正确方法。 – patrickkeller