Mongodb Mongoid-对不同查询的限制

Mongodb Mongoid-对不同查询的限制,mongodb,mongoid,Mongodb,Mongoid,我试图限制从mongoid查询返回的不同结果的数量 Place.where({:tags.in=>[“food”]}).distinct(:name).limit(2) 但这引发了以下错误: NoMethodError:[“p1”、“p2”、“p3”、“p4”]的未定义方法“限制”:数组 如何在mongoid查询中设置限制,而不是获取整个结果集,然后从数组中选择有限数量的项 谢谢MongoDB中的distinct是一个命令,命令不会返回游标。只有游标支持limit(),而命令结果不支持limit

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

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

但这引发了以下错误:

NoMethodError:[“p1”、“p2”、“p3”、“p4”]的未定义方法“限制”:数组

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


谢谢

MongoDB中的distinct是一个命令,命令不会返回游标。只有游标支持limit(),而命令结果不支持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( [

只是为了验证这就是使用MongoId编写aggregation管道的方式。