2

私は現在、次のデータセットを持っています(簡略化):

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

ここで、クエリを実行して、ロケール'en_US'にurl'英語が存在するかどうかを確認します。

db.find({'_locales.locale':'en_US','_locales.url':'english'})

これは確かにデータセット行を提供します。ただし、ロケール'nl_NL'の場合はURL'英語'を確認したい場合。

db.find({'_locales.locale':'nl_NL','_locales.url':'english'})

クエリが一致しないため、不要なデータセットが返されます。ロケールがnl_NLで、同じ行のURLが「英語」の場合にのみ一致させたいので

私は試した

 db.find({'_locales.locale':'en_US','_locales.$.url':'english'})

これはうまくいきませんでした、これを行う方法はありますか?2つのフィールドを別々にではなく、1つの行の2つのフィールドに一致させるには?

どんな助けでも大歓迎です!

4

1 に答える 1

4

使ってみてください$elemMatch

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

$elemMatch配列内の単一の要素が一致式と一致する必要がある場合に使用されます。そうでなければ(あなたが見つけたように)、各基準は異なる配列要素に一致する可能性があります。

于 2012-04-20T09:32:56.083 に答える