以下用于查找带有rsvp = yes的嵌入式文档栏:
foos = MongoMapper.database[ 'foos' ]
cursor = foos.find({ 'bars.rsvp' => 'yes' },
{ :fields => [ 'bars.$' ]})
如何在Ruby中找到rsvp为nil或没有rsvp键 的栏 ?
FWIW,以下似乎可以在Mongo控制台中使用:
db.foos.find({ 'bars.rsvp' : null }, { bars: { $elemMatch: { 'rsvp' : null}}})
答案 0 :(得分:1)
根据你的英文描述,我认为这就是你想要的。
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}}]
希望这能回答你的问题而且有所帮助。