1

我正在努力解决应该很容易但对我来说毫无意义的事情,我在数据库中有这两个文档:

{ "name": "foo", "type": "typeA" },
{ "name": "bar", "type": "typeB" }

我将其发布到_find:

{
    "selector": {
        "type": "typeA"
    },
    "sort": ["name"]
}

哪个按预期工作,但我收到一个警告说没有匹配的索引,所以我尝试将以下各种组合发布到 _index 这没有区别:

{
    "index": {
        "fields": ["type"]
    }
}
{
    "index": {
        "fields": ["name"]
    }
}
{
    "index": {
        "fields": ["name", "type"]
    }
}

如果我删除按名称排序并且只索引它工作正常的类型,除了它没有排序,这是couchdbs'芒果实现的限制还是我错过了什么?

使用视图和地图功能可以正常工作,但我很好奇芒果在这里做什么/不做什么。

4

1 回答 1

0

仅使用类型索引,我认为它通常几乎同样有效,除非您有许多每种类型的文档(因为它必须在内存中进行排序阶段。)

但是由于字段是有序的,因此有必要这样做:

{
    "index": {
        "fields": ["type", "name"]
    }
}

为已按名称排序的每种类型拥有此索引的连续切片。但是查询计划器可能无法确定该索引是否适用。

例如,当前的pouchdb-find(应该类似)需要更复杂但等效的查询:

  {
    selector: {type: 'typeA', name: {$gte: null} },
    sort: ['type','name']
  }

选择此索引并构建一个不依赖于在内存中构建任何步骤的计划。

于 2017-09-23T15:31:49.450 回答