Mongoid查询不会在新模型字段上返回任何内容

时间:2015-04-08 22:03:39

标签: ruby-on-rails ruby mongodb mongoid

我有一个Rails应用程序,我试图在Model类中迭代每个对象,具体取决于对象是否已存档。

class Model
  include Mongoid::Document
  include Mongoid::Timestamps

  field :example_id, type: Integer
  field :archived, type: Boolean, default: false

  def archive_all
    Model.all.where(archived: false).each do |m|
      m.archive!
    end
  end

end

但是,where子句没有返回任何内容。当我进入控制台并输入这些行时,我得到的是:

Model.where(example_id: 3).count   #=> 23
Model.where(archived: false).count #=> 0
Model.all.map(&:archived) #=> [false, false, false, ...]

我在整个应用程序中有其他where子句,它们似乎工作正常。如果它有所不同,那么'archived'字段就是我刚刚添加的字段。

这里发生了什么?我做错了什么?

1 个答案:

答案 0 :(得分:0)

当你说:

Model.where(archived: false)

您正在MongoDB中查找archived字段正好是false的文档。如果你刚刚添加了archived字段,那么数据库中的所有文档都不会包含该字段(不,:default无关紧要)因此archived: false不会有任何文档}。您可能最好寻找archived不是true的文档:

Model.where(:archived.ne => true).each(&:archive!)

您可能希望在archived上添加验证,以确保它始终为truefalse并且每个文档都包含该字段。