我正在尝试为一个嵌入式Mongoid::Document编写一个查询,该查询查找“address”字段既不是nil也不是“"的任何记录。
通过结合使用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的一个bug,还是有其他的问题。有人有这样的查询经验吗?
3条答案
按热度按时间cuxqih211#
最后,这是我能找到的唯一方法,可以选择某个字段不为nil也不为空的记录:
kuhbmx9i2#
我觉得你会笑的。
nil和“”都不等于说:不是零也不是“"。
你真正的意思是
and
,它可以不用$and
来表达,只需要:slwdgvem3#
你可以做得更简洁些:
参见MongoDB manual。