Ruby on rails 3 Mongo查找器和标准

Ruby on rails 3 Mongo查找器和标准,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails 3,Mongodb,Mongoid,我在rails应用程序中使用MongoDB和Mongoid映射器。但是我不理解查询的查找者和标准。例如,在mongoid文档的Finders部分是queryModel.all,但如果我使用它(例如User.all),控制台返回条件而不是结果: => #<Mongoid::Criteria selector: {}, options: {}, class: User, embedded: false> =># 但如果我使用finderModel.fi

我在rails应用程序中使用MongoDB和Mongoid映射器。但是我不理解查询的
查找者
标准
。例如,在mongoid文档的
Finders
部分是query
Model.all
,但如果我使用它(例如
User.all
),控制台返回条件而不是结果:

 => #<Mongoid::Criteria
  selector: {},
  options:  {},
  class:    User,
  embedded: false>
=>#

但如果我使用finder
Model.first
Model.last
,控制台将返回特定的结果。(
User.first
返回特定用户及其字段,如
:email
:username
和other)。为什么
模型。所有的
都作为
查找者
写在文档中?如果我需要获取所有
用户
,或者例如
帖子
,我需要做什么?

您可以将criteria对象视为数组。查找程序返回一个criteria对象,因为条件在mongoid中是可链接的。也就是说,您可以执行以下操作:

users = User.where(:activated => true)
users = users.where(:created_at.gte => Time.now - 1.week) unless params[:recent].blank?
users = users.where(:gender => params[:gender].downcase) if %w[m f].include?(params[:gender].downcase
只要您使用
条件中未定义的任何方法,mongoid就会实际运行查询并获取结果,并将其作为数组处理。如果您特别希望结果以数组形式返回,则始终可以调用
User.all.to\u a
。但请记住,以下两个基本相同:

User.all.each {|u| puts u.id}
User.all.to_a.each {|u| puts u.id}

但后者有一个问题,它将一次性获取内存中的所有文档,并可能导致过多的内存消耗。然而,第一种方法使用Mongodb游标进行最大化,并且只加载游标生成的文档,这意味着控制内存使用。

绝对同意!谢谢你的解释。