2012-04-20 13 views
1

:私は、私は次のクエリMongoのリターン結果のみマッチした配列行

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

を使用する特定のURLとロケールを照会する場合

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

私が手しかし、 '_locales'という正しい行は、私が必要としないen_USを含む配列全体を返します。とにかく、この場合は一致した配列行だけを返します。

ロケールを繰り返して、ロケールとロケールを一致させる必要があると感じています。それは正しいとは思わないが、これを行うためのよりよい解決策がある(結果セットを反復しない)か?たとえば、テーブル構造を変更しますか?ロケール用の2番目のテーブルを作成せずにこのようにしたいと考えていました。

答えて

4

トップレベルのドキュメントは常にクエリします。クエリの条件が特定の配列要素にマッチするだけでMongoDBはその要素だけを返すべきであるとは言いません。現在、ここで必要としない$ slice演算子を使用する以外の特定の配列要素を返す方法はありません。

MongoDB JIRAには、あなたが望むものを許可する機能要求がありますが、現時点では不可能です。

+0

これは私の考えです。今のところ、最大4または5の結果があるため、パフォーマンスの問題になるので、結果を繰り返します。ありがとうございました。 –