0

我有这样的文件:

db.planet.insert({ 
    name: 'Earth',
    stuff: {
        'grass': 'green',
        'sky': 'blue',
        'sea': 'blue'
    }
})
db.planet.insert({ 
    name: 'Mars',
    stuff: {
        'dust': 'red',
        'sky': 'yellow'
    }
})

我想找到所有至少有一些blue 东西的行星(在这种情况下只有地球)。我怎样才能做到这一点?

Catch:我尝试通过使用数组(而不是对象)来解决这个问题(),但我还需要能够更新(确切地说是upsert )一些东西值。例如,我必须能够做到这一点:stuff: [ { k: 'grass', v: 'green'},... ]

db.planet.update({ name: 'Mars' }, {
    '$set': { 
        'stuff.canals': 'brown', 
        'stuff.dust': 'reddish' 
    } 
})

那么,我怎样才能找到上面有东西的行星blue呢?:)

4

1 回答 1

2

使用 $or 运算符。$or 运算符的值应该是一个数组,该数组包含至少一个必须为真的条件。

就您而言,鉴于您提到的字段名称:

 db.planet.find($or:[
   {"stuff.sky":"blue"},
   {"stuff.grass":"blue"},
   {"stuff.sea":"blue"},
   {"stuff.dust":"blue"},
   {"stuff.canals":"blue")
 ])

请参阅http://docs.mongodb.org/manual/reference/operator/or/
由于您要查询的不同字段相当多,您可能希望将所有这些字段名称的数组保存在某处,以便您可以以编程方式生成 $or 数组。

我认为没有办法在不事先知道字段名称的情况下进行查询。请参阅 不带字段名称的 mongodb 查询

于 2013-03-22T17:05:02.073 回答