我试图限制从mongoid查询返回的不同结果的数量.
Place.where({:tags.in => ["food"]}).distinct(:name).limit(2)
但这会引发以下错误:
NoMethodError: undefined method 'limit' for ["p1", "p2", "p3", "p4"]:Array
如何在mongoid查询中设置限制,而不是获取整个结果集,然后从数组中选择有限数量的项目.
谢谢
MongoDB中的distinct是命令,命令不返回游标.只有游标支持limit()而命令结果不支持,就像这里不支持sort()一样,我认为sort很重要,可以先运行,否则你永远不会知道你得到哪个"前两个"不同的项目
有一种解决方法,但使用聚合框架.在简单的MongoDB查询说(当你在MongoDB shell上使用)时,你会使用:
db.places.aggregate( [
{ $match: { 'tags' : { $in: [ 'food' ] } } },
{ $group: { '_id': '$name' } },
{ $sort: { 'name': 1 } },
{ $limit: 2 },
] );
Run Code Online (Sandbox Code Playgroud)
在Mongoid我怀疑你可以改变第一行:
Place.collection.aggregate( [
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1263 次 |
| 最近记录: |