【问题标题】:What is the best approach for mongodb query with sum and sort使用 sum 和 sort 进行 mongodb 查询的最佳方法是什么
【发布时间】:2012-02-16 11:57:28
【问题描述】:

所以我将我的一些代码从 sql 移动到 mongodb 并且有一些事情对我来说还不是很清楚。

假设我有以下简单的 sql 查询(只是一个示例)

select count(a.id) as count, b_id 
       from table group by b_id 
       where c_id=[SOME ID] 
       group by b_id
       order by count desc;

我假设每个人都明白它的作用。

现在有了 mongo,我可以使用多种方法,全部在 mongo 端完成,获取汇总结果并在客户端对它们进行排序,或者只是将原始数据获取到客户端并在那里进行所有处理。

对于上面的查询,最好的方法是什么,使用一些内部 mongodb 机制(mapreduce 等)在数据库中完成所有操作,或者将集合获取到客户端并在那里进行处理。数据集通常会很大,但如有必要,可以将查询拆分为多个部分。

如果重要的话,客户端是基于 Java 的。

【问题讨论】:

    标签: java sorting mongodb select sum


    【解决方案1】:

    使用即将推出的MongoDB Aggregation Framework,您可以轻松完成需要做的事情。它已经在 2.1.x 开发版本中可用。

    如果您坚持使用 2.0 或更早版本,则必须查看您提到的选项或架构更改,以避免首先进行现场聚合。例如,在 NoSQL 中,在操作源数据时维护包含聚合数据的字段或文档是很常见的。最常见的例子是将数组的大小保持为字段:

    update({..}, {$push:{array:element}, $inc:{elementCount:1})
    

    【讨论】:

    • 我还没有投入生产,所以我可以使用它,在您看来,对于上述情况,聚合框架总是表现最好的方法吗?
    • 除了手动管理聚合数据(这是非常有条件的)是的。 AF 是完全原生的,而 group 和 m/r 是 JavaScript 驱动的,因此是单线程的并且(相对)慢。坦率地说,如果你想要 m/r,我会与 Hadoop 集成而不是使用 MongoDB m/r
    • 谢谢,我想我得安装最新的unstable了。
    【解决方案2】:

    您可以使用 Map/Reduce 在 mongo 端对数据进行分组,然后在客户端或 mongo 端对它们进行排序。您还可以找到 map/reduce 示例here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2012-07-20
      相关资源
      最近更新 更多