MongoDB聚合计算关系

时间:2013-06-24 16:01:24

标签: mongodb aggregation-framework

我有两个收藏品,建筑物和订单。建筑物可以有许多订单(1:N关系)。 我正试图通过聚合框架实现“十大统计”(哪些建筑物拥有最多订单)。 我的问题是,我怎样才能获得每栋建筑的总订单?有没有办法在一个聚合中“混合”来自两个集合的数据?

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

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

但在这种情况下,“orders_count”是预先计算的值。它的工作原理但效率非常低,而且“实时”聚合的速度很慢。

有没有办法直接在聚合中计算每个建筑物的相关订单(我确定有办法......)?

非常感谢

1 个答案:

答案 0 :(得分:0)

您没有说明订单如何与您的架构中的建筑物相关,但如果订单具有引用的建筑物ID或名称,则只需将其分组:

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