首页 > 解决方案 > CouchDB 中 $elemMatch 的索引

问题描述

我的 CouchDB 文档包含一个数组字段,一个简化的示例:

{
    "organizations": [
        { "id": "Org 1" },
        { "id": "Org 2" }
    ]
}

我想Org 1使用以下查询查找包含组织的所有文档:

{
    "selector": {"$elemMatch": {"id": "Org 1"}}
}

有没有办法为它使用索引?我试过了

{
    "fields": ["organizations.[].id"]
}

这似乎没有任何效果,我收到了同样的"no matching index found"警告。

标签: indexingcouchdb

解决方案


使用基于标准 JSON/视图的索引,您无法为其构建有用的索引$elemmatch,请参阅Couchdb 文档以了解 json 索引定义不清楚支持索引数组字段 #1388

虽然您可以按元素索引整个数组或元素,但两者都不会为在任何数组位置的元素上匹配的文档生成连续的键列表。

如果您使用来自 cloudant 的插件构建 couchdb,您可以使用确实支持$elemmatch但具有不同特征的文本索引。我建议在这个过去的问题中查看这篇文章和其他链接。


推荐阅读