即使使用限制,Rails Mongoid模型查询结果也会返回错误的大小/长度/计数信息
在我的rails应用程序中查询某个模型时,它会返回正确的结果,摘录size
, length
或count
信息,甚至使用limit
条件。
recipes = Recipe .where(:bitly_url => /some.url/) .order_by(:date => :asc) .skip(10) .limit(100) recipes.size # => 57179 recipes.count # => 57179 recipes.length # => 57179
我无法理解为什么会发生这种情况,它会一直显示食谱集合的总数,而且因为我使用了limit
,正确的值应该是100。
count = 0 recipes.each do |recipe| count += 1 end # WAT count # => 100
有人能帮助我吗? 谢谢!
–
Rails版本:3.2.3
Mongoid版本:2.4.10
MongoDB版本:1.8.4
从精细手册 :
– (整数)长度
又称: 尺寸获取与查询选择器匹配的文档数。
但是.limit
并没有真正改变查询选择器,因为它不会改变查询匹配的内容 , .offset
和.limit
会改变返回的匹配段。 这与ActiveRecord的行为不匹配,文档对于这个微妙的观点并不完全明确。 但是,Mongoid的行为与MongoDB shell的行为相匹配:
> db.things.find().limit(2).count() 23
我的things
集合包含23
文档,您可以看到count
忽略了limit
。
如果你想知道返回了多少结果,那么你可以to_a
它:
recipes.to_a.length
正如其中一条评论中所提到的,在较新的Mongoid版本中(不确定哪些版本),您可以简单地使用recipes.count(true)
,这将包括限制,而不需要根据此处的API查询结果集。
在当前版本的mongoid(5.x)中, count(true)
不再有效。 相反, count
现在接受一个选项哈希。 其中有:limit
选项
criteria.count(limit: 10)
或者,重用已在标准上设置的任何限制
criteria.count(criteria.options.slice(:limit))