2012-04-20 49 views
1

我公司目前有以下數據集(簡體):蒙戈返回結果只有匹配的陣列排

{ 
    'component_id':1, 
    '_locales':[ 
     { 
      'url': 'dutch', 
      'locale': 'nl_NL' 
     }, 
     { 
      'url': 'english', 
      'locale': 'en_US' 
     } 
    ] 
} (etc more rows similar to this but unique urls) 

當我查詢特定的URL和區域我用下面的查詢

db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'dutch' } }}); 

我得到然而,'_locales'返回整個數組,包括我不需要的en_US,無論如何它只返回匹配的數組行,在這種情況下:

'_locales':[ 
{ 
    'url': 'dutch', 
    'locale': 'nl_NL' 
}] 

我有一種感覺,我不得不遍歷整個語言環境並將該行匹配到語言環境。它感覺不對,是否有更好的解決方案來做到這一點(而不是迭代結果集)?例如,更改表結構?我希望這樣做,而不是僅爲本地語言環境創建第二張表。

回答

4

您總是查詢頂級文檔。僅僅因爲你的查詢條件涉及匹配一個特定的數組元素並不能告訴MongoDB它應該只返回那個元素。目前除了使用$ slice操作符之外,沒有辦法返回特定的數組元素,這不是您在這裏需要的。

在MongoDB JIRA中有功能請求將允許你想要但目前是不可能的。

+0

好的,這就是我的想法。現在我將遍歷結果,因爲結果中有最多4或5個結果,所以這會是一個性能問題。謝謝。 – 2012-04-20 11:12:32