Mongoid - 限制不同的查询

时间:2013-07-10 07:03:50

标签: mongodb mongoid

我试图限制从mongoid查询返回的不同结果的数量。

Place.where({:tags.in => ["food"]}).distinct(:name).limit(2)

但这引发了以下错误:

NoMethodError: undefined method 'limit' for ["p1", "p2", "p3", "p4"]:Array

如何在mongoid查询中设置限制,而不是获取整个结果集,然后从数组中选择有限数量的项目。

由于

1 个答案:

答案 0 :(得分:6)

MongoDB中的

是一个命令,命令不返回游标。只有游标支持limit()而命令结果不支持,就像这里不支持sort()一样,我认为sort很重要,可以先运行,否则你永远不会知道你得到哪个“前两个”不同的项目

有一种解决方法,但使用聚合框架。在普通的MongoDB查询中(当您在MongoDB shell上使用时),您将使用:

db.places.aggregate( [
    { $match: { 'tags' : { $in: [ 'food' ] } } },
    { $group: { '_id': '$name' } },
    { $sort: { 'name': 1 } },
    { $limit: 2 },
] );

在Mongoid中我怀疑你可以将第一行更改为:

Place.collection.aggregate( [