mongoid或条件返回没有结果

时间:2015-06-03 23:56:03

标签: ruby-on-rails ruby mongodb mongoid

我正在使用mongoid any_of查询来查找预约status_selected为“option1”或者source source_selected为“opt4”的潜在客户。我有一份符合此标准的主要文件:

> db.leads.find()
{ "_id" : ObjectId("556e4f576d61638512060000"), "appointment status_selected" : "option1", "lead source_selected" : "opt2", "updated_at" : ISODate("2015-06-03T00:50:31.029Z"), "created_at" : ISODate("2015-06-03T00:50:31.029Z") }

但是,当我使用mongoid查询助手进行查询时,我得不到任何结果:

Lead.where({"appointment status_selected" => "option1"}).any_of({"lead source_selected" => "opt4" }).first
# => nil

这是轻便摩托车的表现:

  

MOPED:127.0.0.1:27017 QUERY database = core_development   collection = leads selector = {“appointment status_selected”=>“option1”,   “$或”=> [{“lead source_selected”=>“opt4”}]} flags = [] limit = -1 skip = 0   batch_size = nil fields = {:_ id => 1}运行时间:13.7830ms MOPED:   127.0.0.1:27017 QUERY database = core_development collection = leads selector = {“appointment status_selected”=>“option1”,   “$或”=> [{“lead source_selected”=>“opt4”}]} flags = [] limit = 0 skip = 0   batch_size = nil fields = nil runtime:4.1470ms

为什么Mongoid没有在MongoDB中返回该记录?

2 个答案:

答案 0 :(得分:0)

我会试试这个:

Lead.any_of({"appointment status_selected" => "option1"}, {"lead source_selected" => "opt4"}).first

虽然我不熟悉Mongoid(或者更确切地说,Origin),但从我能读到的Origin docs on selection开始,至少有一个$or对于要返回的行,条件必须为true。由于您只为#any_of来电提供了一个标准,因此也可能是另一个#where来电。

答案 1 :(得分:0)

您已要求 Mongo 返回 "appointment status_selected": "option1" 为真的所有文档,以及 any_of 的参数中的至少一个语句。由于只有一个参数,这个参数必须为真才能返回文档。但是,您的文档有 lead source_selected: 'opt2',因此不匹配。