MongoDB:查询嵌套数组中的值?

时间:2011-12-26 12:47:15

标签: arrays mongodb

我有这种架构的文件:

{
   ...
  "coverages" : [
    [
      "GB",
      "WC1"
    ],
    [
      "GB",
      "SE2"
    ],
    ...
  ]
}

我想找到所有涵盖'覆盖范围的文件。包含一个数组,其第二个元素以' WC'开头,即覆盖范围与[' GB',/ ^ WC /]相匹配。

有没有办法用标准的mongodb查询语言?

我想可以使用自定义JavaScript功能轻松完成,但文档说它速度慢得多......

谢谢!

P.S。我想避免更改架构。

更新:Mongo中存在关联错误/错误:https://jira.mongodb.org/browse/SERVER-1264

2 个答案:

答案 0 :(得分:5)

我想这应该有效:

db.mycollection.find({"coverages": {"$elemMatch": {"2": /^WC/}}})

答案 1 :(得分:0)

db.collection.find({ "coverages.0.1": /^WC/ })应该做到这一点。它是说,匹配文档,其中密钥coverage中第一个数组的第二个元素以WC开头。

但是,如果您尝试将GB(数组中的第一项)与数组中的第二项相关联,则这是一个错误的架构。

这是将键映射到值的文档/对象/字典的自然情况。

像这样:

{
  "coverages" : { "GB": "WC1" }
}

现在,您的查询更符合您的逻辑:db.collection.find({ "coverages.gb": /^WC/ })