我目前有以下数据集(简化):
{
'component_id':1,
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
},
{
'url': 'english',
'locale': 'en_US'
}
]
} (etc more rows similar to this but unique urls)
当我查询特定网址和区域设置时,我使用以下查询
db.find({'_locales': { '$elemMatch': { 'locale': 'nl_NL', 'url': 'dutch' } }});
然而,我得到了正确的排回' _locales'返回整个数组,包括我不需要的en_US,无论如何它只返回匹配的数组行,在这种情况下:
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
}]
我有一种感觉,我必须遍历语言环境并将行匹配到语言环境。它感觉不对,是否有更好的解决方案(不迭代结果集)?例如,更改表结构?我希望这样做而不用仅为语言环境创建第二个表..
答案 0 :(得分:4)
您始终查询顶级文档。仅仅因为您的查询条件涉及匹配特定的数组元素并不告诉MongoDB它应该只返回该元素。目前除了使用$ slice运算符之外,没有办法返回特定的数组元素,这不是你需要的。
MongoDB JIRA中有一些功能请求可以满足您的需求但目前无法实现。