2

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

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

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

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

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

非常感谢

4

1 回答 1

1

您没有说明订单与架构中的建筑物的关系,但如果订单有建筑物 ID 或它引用的名称,只需按以下方式分组:

db.orders.aggregate( { $group : { _id: "$buildingId",
                                  sum: {$sum:1}
                                }
                     },
                     /* $sort by sum:-1, $limit:10 like you already have */
)
于 2013-06-24T21:27:00.173 回答