我想爲嵌入式Mongoid :: Document編寫一個查詢,查找其中「地址」字段既不是零也不是「」的任何記錄。或與查詢匹配零或「」與Mongoid仍匹配「」?
使用MongoDB的文檔,this issue in the Mongoid bug reports和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的錯誤,或者是否有其他問題。有沒有人有這樣的查詢經驗?
不應該查詢使用'$和'而不是'$或'? – Dieseltime 2012-03-09 22:52:32
不,那永遠不會匹配?如果該值爲零,則它將不匹配「」,反之亦然。 – kclair 2012-03-09 22:56:58
我同意,你或沒有意義。它是布爾邏輯,a!= 1或!= 2將始終返回true,因爲它總是不會是1或不是2. – 2012-03-09 23:04:10