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'  
}]  

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

4

1 に答える 1

4

常にトップ レベルのドキュメントをクエリします。クエリ条件に特定の配列要素の一致が含まれているからといって、その要素のみを返すように MongoDB に指示するわけではありません。現在、ここで必要なものではない $slice 演算子を使用する以外に、特定の配列要素を返す方法はありません。

MongoDB JIRA には、必要なものを許可する機能要求がありますが、現在は不可能です。

于 2012-04-20T11:10:26.113 に答える