Mongoid使用嵌入式哈希查找或创建

时间:2014-09-12 12:42:44

标签: ruby-on-rails ruby mongodb mongoid

使用Mongoid(3.1.6) 我有一个包含以下字段的集合:

field :project, type: String
field :date_hierarchy, type: Hash, default: {year: 0, semester: 0, quarter: 0, month: 0, day: 0}

我想找到一个包含项目的文档:“1”,date_hierarchy:{year:2013,semester:2,quarter:4,month:11,day:12} 如果找不到文件,我希望它被创建 我怎样才能做到这一点? 我试过这些,而不是他们的工作

MyModel.where(:project=>"1", "date_hierarchy.year"=>2013, "date_hierarchy.semester"=>2, "date_hierarchy.quarter"=>4, "date_hierarchy.month"=>11, "date_hierarchy.day"=>25).first_or_create!

MyModel.where(:project=>"1", "date_hierarchy.year"=>2013, "date_hierarchy.semester"=>2, "date_hierarchy.quarter"=>4, "date_hierarchy.month"=>11, "date_hierarchy.day"=>25).find_or_create_by("date_hierarchy.year"=>2013, "date_hierarchy.semester"=>2, "date_hierarchy.quarter"=>4, "date_hierarchy.month"=>11, "date_hierarchy.day"=>25).

1 个答案:

答案 0 :(得分:3)

您需要将date_hierarchy值作为哈希值传递,就像传递给new()create()一样:

MyModel.find_or_create_by({
  project: '1',
  date_hierarchy: {year: 2013, semester: 2, quarter: 4, month: 11, day: 25}
})