2012-04-20 46 views
1

我公司目前有以下数据集(简体):蒙戈返回结果只有匹配的阵列排

{ 
    'component_id':1, 
    '_locales':[ 
     { 
      'url': 'dutch', 
      'locale': 'nl_NL' 
     }, 
     { 
      'url': 'english', 
      'locale': 'en_US' 
     } 
    ] 
} (etc more rows similar to this but unique urls) 

当我查询特定的URL和区域我用下面的查询

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

我得到然而,'_locales'返回整个数组,包括我不需要的en_US,无论如何它只返回匹配的数组行,在这种情况下:

'_locales':[ 
{ 
    'url': 'dutch', 
    'locale': 'nl_NL' 
}] 

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

回答

4

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

在MongoDB JIRA中有功能请求将允许你想要但目前是不可能的。

+0

好的,这就是我的想法。现在我将遍历结果,因为结果中有最多4或5个结果,所以这会是一个性能问题。谢谢。 – 2012-04-20 11:12:32