即使使用限制,Rails Mongoid模型查询结果也会返回错误的大小/长度/计数信息

Alm*_*lho 8 ruby-on-rails count limit mongodb mongoid

当在我的Rails应用程序某型号查询,它返回正确的结果,摘取size,lengthcount信息,即使使用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
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会这样,它会一直显示食谱集合的总数,而且自从我使用以来,正确的值应该是100 limit.

count = 0
recipes.each do |recipe|
  count += 1
end

# WAT
count # => 100
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?谢谢!

-
Rails版本:3.2.3
Mongoid版本:2.4.10
MongoDB版本:1.8.4

mu *_*ort 8

精细手册:

- (整数)长度
又称:大小

获取与查询选择器匹配的文档数.

但是.limit并没有真正改变查询选择器,因为它不会更改查询匹配的内容,.offset并且.limit会更改返回的匹配段.这与ActiveRecord的行为不匹配,文档对于这个微妙的观点并不完全明确.但是,Mongoid的行为与MongoDB shell的行为相匹配:

> db.things.find().limit(2).count()
23
Run Code Online (Sandbox Code Playgroud)

我的things收藏包含23文件,你可以看到count忽略了limit.

如果您想知道返回了多少结果,那么您可以to_a先:

recipes.to_a.length
Run Code Online (Sandbox Code Playgroud)

  • 在这里使用Mongoid 4.0.2,如果你不想将所有这些加载到内存中,你可以做`.where(...).limit(100).count(true)`.这将尊重限制. (2认同)