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

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

这确实为我提供了数据集行。但是,如果我想检查语言环境是否为“nl_NL”,则网址为“english”;

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

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

我试过了

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

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

任何帮助表示赞赏!

4

1 回答 1

4

尝试使用$elemMatch

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

$elemMatch当数组中的单个元素必须匹配匹配表达式时使用。否则(如您所见),每个条件都可以匹配不同的数组元素。

于 2012-04-20T09:32:56.083 回答