我尝试使用唯一值(first_name)获取最新的N条记录。
到目前为止:
@users = User.all(:limit => 5, :sort => [:created_at, :desc]).distinct(:first_name)
几乎可以工作..但忽略限制和排序顺序
也:
@users = User.limit(5).desc(:created_at).distinct(:first_name)
忽略'limit'和'desc'
@users = User.limit(5)
作品..
我做错了什么? 任何帮助将不胜感激!
答案 0 :(得分:1)
我玩了一会儿,这是我能想到的最好的。
祝你好运。@users = User.desc(:created_at).reduce([]) do |arr, user|
unless arr.length == 5 || arr.detect{ |u| u.first_name == user.first_name }
arr << user
end
arr
end
答案 1 :(得分:0)
您是否尝试使用amatsuda / kaminari等分页宝石并使用page().per()
限制结果?
答案 2 :(得分:0)
distinct
和count
都忽略了Mongoid中的limit
命令。使用count
,您可以传递true(即User.limit(5).count(true)
)以强制它注意范围。不幸的是,据我所知,没有这样的伎俩(请参阅docs / source here)。
如果你想抓住前5 first_name
,你就可以做到这一点(不同):
User.desc(:created_at).limit(5).map(&:first_name)
这将遵守限制,但仍然从数据库加载5个完整对象(然后丢弃对象的其余部分以提供全名)。如果您确实需要运行distinct,那么最好转向聚合框架解决方案。
我还没有测试过,但这似乎是你在寻找的东西:https://stackoverflow.com/a/17568267/127311
答案 3 :(得分:0)
我玩了一些结果我发现了这个。
User.limit(2).count => 10 #but in array I found only two results
User.limit(2).to_a.count => 2
可能是limit会给出正确的结果,但count query会给出错误的结果。