我有两个收藏品,建筑物和订单。建筑物可以有许多订单(1:N关系)。 我正试图通过聚合框架实现“十大统计”(哪些建筑物拥有最多订单)。 我的问题是,我怎样才能获得每栋建筑的总订单?有没有办法在一个聚合中“混合”来自两个集合的数据?
目前我正在做这样的事情:
db.buildings.aggregate( [
{ $group : _id : { street : "$street",
city : "$city",
orders_count : "$orders_count" }},
{ $sort : { _id.orders_count : -1 }},
{ $limit : 10}
] );
但在这种情况下,“orders_count”是预先计算的值。它的工作原理但效率非常低,而且“实时”聚合的速度很慢。
有没有办法直接在聚合中计算每个建筑物的相关订单(我确定有办法......)?
非常感谢
答案 0 :(得分:0)
您没有说明订单如何与您的架构中的建筑物相关,但如果订单具有引用的建筑物ID或名称,则只需将其分组:
db.orders.aggregate( { $group : { _id: "$buildingId",
sum: {$sum:1}
}
},
/* $sort by sum:-1, $limit:10 like you already have */
)