0

私はこのような文書を持っています:

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

少なくともいくつかのblue もの(この場合は地球のみ)を持っているすべての惑星を見つけたいです。どうやってやるの?

キャッチ:もの( )に(オブジェクトの代わりに)配列を使用してこれを解決しようとしましたが、いくつかのものの値を更新(正確にはアップサートstuff: [ { k: 'grass', v: 'green'},... ])できる必要もあります。たとえば、私はこれを行うことができなければなりません:

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

では、どうすれば何かが付いている惑星を見つけることができblueますか?:)

4

1 に答える 1

2

$or演算子を使用します。$ or演算子の値は配列である必要があり、その配列には少なくとも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クエリを参照してください 。

于 2013-03-22T17:05:02.073 に答える