Mongodb Mongo查询必须匹配1个子集中的2个字段

Mongodb Mongo查询必须匹配1个子集中的2个字段,mongodb,nested,Mongodb,Nested,我目前简化了以下数据集: { 'component_id':1, '_locales':[ { 'url': 'dutch', 'locale': 'nl_NL' }, { 'url': 'english', 'locale': 'en_US' } ] } (etc

我目前简化了以下数据集:

{  
    '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“english”是否存在:

db.find({'_locales.locale':'en_US','_locales.url':'english'})
这确实为我提供了数据集行。但是,如果我想检查区域设置“nl_nl”的url是否为“english”

db.find({'_locales.locale':'nl_NL','_locales.url':'english'})
我仍然得到了我不想要的数据集,因为查询不应该匹配。因为我只希望在区域设置为nl_nl且同一行中的url为“english”时匹配

我试过了

 db.find({'_locales.locale':'en_US','_locales.$.url':'english'})
这没用,有什么办法吗?所以它匹配一行中的两个字段,而不是分别匹配两个字段

感谢您的帮助

尝试使用

$elemMatch在数组中的单个元素必须与匹配表达式匹配时使用。否则,您会发现,每个条件都可以匹配不同的数组元素。

尝试使用


$elemMatch在数组中的单个元素必须与匹配表达式匹配时使用。否则,正如您所发现的,每个条件都可以匹配不同的数组元素。

@WimWisselink:不客气,欢迎使用堆栈溢出!如果这个答案解决了您的问题,那么您可以将其标记为已接受的答案。这将使您的接受答案率保持在较高水平,这对您是一件好事。@WimWisselink:不客气,欢迎使用堆栈溢出!如果这个答案解决了您的问题,那么您可以将其标记为已接受的答案。这将保持你的接受率高,这是一件好事。
db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'english' } }});