是否可以按子字段对象值查询MongoDB?

是否可以按子字段对象值查询MongoDB?,mongodb,Mongodb,我有这样的文件: db.planet.insert({ name: 'Earth', stuff: { 'grass': 'green', 'sky': 'blue', 'sea': 'blue' } }) db.planet.insert({ name: 'Mars', stuff: { 'dust': 'red', 'sky': 'yellow' } }) 我

我有这样的文件:

db.planet.insert({ 
    name: 'Earth',
    stuff: {
        'grass': 'green',
        'sky': 'blue',
        'sea': 'blue'
    }
})
db.planet.insert({ 
    name: 'Mars',
    stuff: {
        'dust': 'red',
        'sky': 'yellow'
    }
})
我想找到所有至少有蓝色物质的行星(本例中只有地球)。我该怎么做

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

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

那么,我怎样才能找到上面有蓝色东西的行星呢

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

在您的情况下,考虑到您提到的字段名称:

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

由于有许多不同的字段需要查询,因此可能需要在某个位置保留所有这些字段名的数组,以便以编程方式生成$or数组


我不认为有一种方法可以在不事先知道字段名的情况下进行查询。请参阅。

Meryn,谢谢!因为我不知道字段名,所以您的解决方案不适合我的情况,但目前有一个可接受的解决方案。不知道我怎么会错过那个问题