我有这种架构的文件:
{
...
"coverages" : [
[
"GB",
"WC1"
],
[
"GB",
"SE2"
],
...
]
}
我想找到所有涵盖'覆盖范围的文件。包含一个数组,其第二个元素以' WC'开头,即覆盖范围与[' GB',/ ^ WC /]相匹配。
有没有办法用标准的mongodb查询语言?
我想可以使用自定义JavaScript功能轻松完成,但文档说它速度慢得多......
谢谢!
P.S。我想避免更改架构。
更新:Mongo中存在关联错误/错误:https://jira.mongodb.org/browse/SERVER-1264
答案 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/ })