Mongo返回结果只匹配数组行

时间:2012-04-20 11:05:47

标签: mongodb resultset

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

{  
    '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'  
}]  

我有一种感觉,我必须遍历语言环境并将行匹配到语言环境。它感觉不对,是否有更好的解决方案(不迭代结果集)?例如,更改表结构?我希望这样做而不用仅为语言环境创建第二个表..

1 个答案:

答案 0 :(得分:4)

您始终查询顶级文档。仅仅因为您的查询条件涉及匹配特定的数组元素并不告诉MongoDB它应该只返回该元素。目前除了使用$ slice运算符之外,没有办法返回特定的数组元素,这不是你需要的。

MongoDB JIRA中有一些功能请求可以满足您的需求但目前无法实现。