2013-03-22 157 views
0

我的文件是這樣的:是否有可能通過子字段對象值查詢MongoDB?

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'},... ])解決這一點,但我也需要能夠更新(UPSERT是精確的)價值。比如我一定能做到這一點:

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

那麼,如何可以找到與他們的東西blue行星? :)

回答

2

使用$或操作符。 $或操作符值應該是一個數組,其中包含至少一個必須爲真的條件的數組。

在你的情況,考慮到你所提到的字段名稱:

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

+0

Meryn,謝謝!由於我不知道字段名稱您的解決方案不適合我的情況,但有一個可接受的解決方案[鏈接問題](http://stackoverflow.com/questions/10901151/mongodb-query-without-field -名稱)。不知道我是如何錯過這個問題的。 :) – johndodo 2013-03-26 10:57:05

相關問題