[英]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 by
和limit
。
而且似乎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年的历史。 这些运算符( count
, group
, distinct
)仍然可以运行,但是速度很慢。 使用这些运算符中的任何一个都等于运行Map / Reduce。 而且我不确定是否为这些操作员实施过分片( 请注意,博客文章早于分片 )。
实现此目的的现代方法是使用新的聚合框架 。 这既快又支持分片。 但是,它仍处于不稳定的构建中。
这显示了如何在Mongo中使用分组依据,但没有讨论如何在组内实施按顺序和限制。
您要转换的查询是SQL中的简单查询,但这不是MongoDB中的简单查询。 Mongoid可能遇到的问题仅仅是,您正在做MongoDB根本不支持的事情( 在新的Aggregation Framework之外 )。
如果您无权访问Aggregation Framework,则需要分多个步骤进行。
count(*) grouped by X
的count(*) grouped by X
。 sort()
, skip()
, limit()
对M / R输出进行查询。 您应该查看Mongoid:查询 。
它提供了有关如何使用order_by
和limit
。
编辑:
与@mu指出的等效,删除了有关distinct
和group by
注释。 相反,您应该使用group
并提供所链接文章中详细介绍的reduce函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.