繁体   English   中英

MongoDB分组依据(+排序和限制)

[英]MongoDB group by (+ sort & limit)

所以我有下面的SQL分组

select count(*) as NO_OF_MSGS,FROM_USER,PROFILE_IMG,MSG from MESSAGES group by FROM_USER order by NO_OF_MSGS desc,DATE_SENT limit ?,?

我如何在MongoDB中复制该组。 我遇到了这份出色的文章-http://kylebanker.com/blog/2009/11/mongodb-count-group/

这显示了如何在Mongo中使用分组依据,但没有讨论如何在组内实施order bylimit

而且似乎Mongoid不提供对group功能的支持,有人知道它是否有区别吗?

对于分组,您可以使用rails的group_by方法

http://api.rubyonrails.org/classes/Enumerable.html#method-i-group_by

对于订购,您可以使用Array的sort_by方法

http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-sort_by-21

我如何在MongoDB中复制该组。 我遇到了这份出色的文章-http://kylebanker.com/blog/2009/11/mongodb-count-group/

首先,这是一个2年的历史。 这些运算符( countgroupdistinct )仍然可以运行,但是速度很慢。 使用这些运算符中的任何一个都等于运行Map / Reduce。 而且我不确定是否为这些操作员实施过分片( 请注意,博客文章早于分片 )。

实现此目的的现代方法是使用新的聚合框架 这既快又支持分片。 但是,它仍处于不稳定的构建中。

这显示了如何在Mongo中使用分组依据,但没有讨论如何在组内实施按顺序和限制。

您要转换的查询是SQL中的简单查询,但这不是MongoDB中的简单查询。 Mongoid可能遇到的问题仅仅是,您正在做MongoDB根本不支持的事情( 在新的Aggregation Framework之外 )。

如果您无权访问Aggregation Framework,则需要分多个步骤进行。

  1. 运行M / R以获取count(*) grouped by Xcount(*) grouped by X
  2. 使用sort()skip()limit()对M / R输出进行查询。
  3. 如果您要排序的数据太多(〜1M用户),则上述方法可能不起作用,您可能需要索引M / R的输出才能使排序起作用。

您应该查看Mongoid:查询

它提供了有关如何使用order_bylimit

编辑:

与@mu指出的等效,删除了有关distinctgroup by注释。 相反,您应该使用group并提供所链接文章中详细介绍的reduce函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM