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

时间:2012-04-20 09:22:20

标签: mongodb nested

我目前有以下数据集(简化):

{  
    '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'english';

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

我仍然得到了我不想要的数据集,因为查询不匹配。因为我只希望它匹配,如果语言环境是nl_NL并且在同一行中,网址是'english'

我试过

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

这没用,有什么办法可以做到这一点吗?那么它分别匹配1行中的2个字段而不是2个字段?

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

尝试使用$elemMatch

db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'english' } }});
当数组中的单个元素必须与匹配表达式匹配时,使用

$elemMatch。否则(如您所见),每个条件都可以匹配不同的数组元素。