【问题标题】:MongoDB Aggregation count over a relation关系上的 MongoDB 聚合计数
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多