使用Mongoid查询语法与Activerecord

时间:2011-04-12 16:10:36

标签: ruby-on-rails ruby mongodb

我有一个我很困惑的难题。

在rails控制台中,如果我使用

@o = ObjName.where(o_id: "VAL")

我没有收到退回的对象。我得到了这个:

 => #<Mongoid::Criteria
  selector: {:conditions=>{:site_id=>"PST"}},
  options:  {},
  class:    Site,
  embedded: false>

但如果我使用:

@o = ObjName.first(:conditions => {:o_id => "VAL"})

我愿意。在Mongoid中使用函数,我的模型包括Mongoid。所以我不明白为什么这不起作用。

2 个答案:

答案 0 :(得分:5)

Mongoid在装载时非常懒惰。它只会执行查询并在迭代结果时将结果加载到对象中。

因此,Model.find将执行mongodb findOne方法并加载到结果中。

@o = ObjName.where(o_id=>"VAL").first #will push into an object

@o = ObjName.where(:status=>"whoknows").all
#query has not been loaded
@o.each do |o|
  #now the query has been executed
  puts o
end

答案 1 :(得分:0)

也许你在查询结束时只需要一个“.all”。