从你的英文描述来看,我认为这就是你想要的。
cursor = foos.find( { '$or' => [ { 'bars.rsvp' => nil }, { 'bars.rsvp' => { '$exists' => false } } ] } )
这是一个完整的测试脚本。
# rails c
foos = MongoMapper.database[ 'foos' ]
docs = [
{ 'bars' => { 'x' => 1, 'rsvp' => 'yes' } },
{ 'bars' => { 'x' => 2, 'rsvp' => nil } },
{ 'bars' => { 'x' => 3 } }
]
foos.remove
foos.insert(docs)
cursor = foos.find( { '$or' => [ { 'bars.rsvp' => nil }, { 'bars.rsvp' => { '$exists' => false } } ] } )
cursor.to_a
提交到'rails c',最后一行的结果如下。
=> [{"_id"=>BSON::ObjectId('527020a97f11ba2138000002'), "bars"=>{"x"=>2, "rsvp"=>nil}}, {"_id"=>BSON::ObjectId('527020a97f11ba2138000003'), "bars"=>{"x"=>3}}]
希望这能回答您的问题并有所帮助。