Mongoid限制参数被忽略

时间:2012-03-13 16:27:19

标签: mongodb mongoid

我尝试使用唯一值(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)

作品..

我做错了什么? 任何帮助将不胜感激!

4 个答案:

答案 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)

distinctcount都忽略了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会给出错误的结果。