【发布时间】:2011-09-13 21:14:43
【问题描述】:
我正在寻找这种 SQL 查询的等价物。
SELECT field, count(*) as counter from table order by counter DESC
实现这一目标的最佳方法是什么?
谢谢
【问题讨论】:
标签: mongodb
我正在寻找这种 SQL 查询的等价物。
SELECT field, count(*) as counter from table order by counter DESC
实现这一目标的最佳方法是什么?
谢谢
【问题讨论】:
标签: mongodb
使用 Map-Reduce。通过发出键和值 1 来映射每个文档,然后使用简单的 reduce 操作聚合它们。见http://www.mongodb.org/display/DOCS/MapReduce
【讨论】:
我会通过分别跟踪各自的计数来处理聚合查询,即在它们自己的集合中。这样,您可以简单地查询“最常出现”的集合。缺点:每当数据发生变化时,您都需要执行另一次写入。
当然,您也可以使用 Map/Reduce 不时更新该集合。这在一定程度上取决于信息的准确性以及更改频率。
但是,请确保不要经常调用 Map/Reduce 操作:它不打算以交互方式使用(即不是在每个页面视图中),而是几乎不用于每次更新计数的离线进程中小时左右。因此,如果您的计数变化很快,请使用计数器集合。
【讨论】: