0

以下工作用于查找 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}}})
4

1 回答 1

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}}] 

希望这能回答您的问题并有所帮助。

于 2013-10-29T20:56:36.417 回答