关系上的MongoDB聚合计数

关系上的MongoDB聚合计数,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有两个收藏品,建筑和订单。一个建筑可以有多个顺序(1:N关系)。 我试图通过聚合框架实现“十大统计”(哪些建筑拥有最多的订单)。 我的问题是,如何才能获得每栋建筑的总订单?有没有办法在一个聚合中“混合”来自两个集合的数据 目前我正在做这样的事情: db.buildings.aggregate( [ { $group : _id : { street : "$street",

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

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

db.buildings.aggregate( [
                        { $group : _id : { street : "$street",
                                          city : "$city",
                                          orders_count : "$orders_count" }},
                        { $sort : { _id.orders_count : -1 }},
                        { $limit : 10}
                        ] );
但在这种情况下,“订单数量”是预先计算的值。它可以工作,但效率很低,并且对于“实时”聚合来说速度很慢

是否有一种方法可以直接在聚合中计算每个建筑的相关订单(我确信有一种方法…)


非常感谢

您没有说明订单与架构中的建筑之间的关系,但如果订单具有其引用的建筑id或名称,请按以下内容分组:

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

聚合只能在单个集合上运行-为什么不查询orders集合以获取此信息?订单中不包含关于它是为哪座建筑而建的信息吗?如果您添加订单文档的外观,也许我们可以建议具体的聚合。我已经对建筑物进行了此操作,因为我也需要此集合中的信息。订单上有一个建筑标识。