我有这样的文件:
db.planet.insert({
name: 'Earth',
stuff: {
'grass': 'green',
'sky': 'blue',
'sea': 'blue'
}
})
db.planet.insert({
name: 'Mars',
stuff: {
'dust': 'red',
'sky': 'yellow'
}
})
我想找到至少有一些blue
东西的所有行星(在这种情况下只有地球)。我怎么能这样做?
Catch :我尝试使用 stuff (stuff: [ { k: 'grass', v: 'green'},... ]
)的数组(而不是对象)来解决这个问题,但我还需要能够更新( upsert 准确地说)某些东西的值。例如,我必须能够这样做:
db.planet.update({ name: 'Mars' }, {
'$set': {
'stuff.canals': 'brown',
'stuff.dust': 'reddish'
}
})
那么,我怎样才能找到带有blue
的行星呢? :)
答案 0 :(得分:2)
使用$或运算符。 $或operator值应该是一个数组,该数组包含至少必须为1的条件。
在您的情况下,根据您提到的字段名称:
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/
由于您要查询的字段数量相当多,您可能希望在某处保留所有这些字段名称的数组,以便以编程方式生成$或数组。
我认为没有办法在不事先知道字段名称的情况下进行查询。请参阅mongodb query without field name。