我目前有以下数据集(简化):
{
'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个字段?
感谢任何帮助!
答案 0 :(得分:4)
尝试使用$elemMatch
db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'english' } }});
当数组中的单个元素必须与匹配表达式匹配时,使用 $elemMatch
。否则(如您所见),每个条件都可以匹配不同的数组元素。