ИЛИ запросить совпадение ноль или "" с Mongoid все еще совпадает ""? - PullRequest
2 голосов
/ 10 марта 2012

Я пытаюсь написать запрос для встроенного Mongoid :: Document, который находит любую запись, где поле "address" не равно ни nil, ни "".

Используя комбинацию документации MongoDB, эта проблема в отчетах об ошибках Mongoid и документации Mongoid, я думаю, что-то вроде этого должно работать:

scope :with_address, where("$or" => [{:address => {"$ne" => nil}}, {:address => {"$ne" => ""}}])

Когда я запускаю это, селектор выглядит нормально:

1.9.2p290 :002 > report.document.records.with_address
 => #<Mongoid::Criteria
  selector: {"$or"=>[{:address=>{"$ne"=>nil}}, {:address=>{"$ne"=>""}}]},  
  options:  {},
  class:    GlobalBoarding::MerchantPrincipal,
  embedded: true>

Но когда я смотрю на результаты, они содержат запись с пустым адресом:

1.9.2p290 :007 > report.document.records.with_address.last  
<Record _id: 4f593f245af0501074000122, _type: nil,  version: 1, name: "principal contact 3", title: "", dob: nil, address: "", email: "", phone: "", fax: ""> 

Я не могу понять, правильно ли я делаю запрос, если этоошибка с Mongoid, или если есть другая проблема.У кого-нибудь есть опыт работы с таким запросом?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

в конце концов, это единственный способ, который я смог найти, который работает для выбора записей, где определенное поле не ноль и не пусто:

scope :with_name, all_of(:name.ne => nil).all_of(:name.ne => "")
2 голосов
/ 10 марта 2012

Я думаю, вы будете смеяться над этим.

Ни ноль, ни "" - это не то же самое, что сказать: Не ноль и не "".

Вы действительно имеете в виду and, и это можно выразить без $and, используя просто:

$ne=>nil, $ne=>""
...