【发布时间】:2013-06-25 05:27:00
【问题描述】:
我有两个系列,建筑和命令。一座建筑可以有许多订单(1:N 关系)。 我正在尝试使用聚合框架实现“十大统计”(哪些建筑物的订单最多)。 我的问题是,我怎样才能获得每栋建筑的总订单?有没有办法在一个聚合中“混合”来自两个集合的数据?
目前我正在做这样的事情:
db.buildings.aggregate( [
{ $group : _id : { street : "$street",
city : "$city",
orders_count : "$orders_count" }},
{ $sort : { _id.orders_count : -1 }},
{ $limit : 10}
] );
但在这种情况下,“orders_count”是预先计算的值。它可以工作,但效率非常低,并且“实时”聚合速度很慢。
有没有办法直接在聚合中计算每个建筑物的相关订单(我确定有办法......)?
非常感谢
【问题讨论】:
-
聚合只能在单个集合上运行 - 为什么不查询订单集合以获取此信息?订单中不包含有关其用于哪个建筑物的信息吗?如果您添加订单文档的样子,也许我们可以建议特定的聚合。
-
我已经在建筑物上完成了这项工作,因为我也需要来自这个集合的信息。订单有一个 building_id。
标签: mongodb aggregation-framework