CouchDB 查询 no index exists for this sort 错误
CouchDB query no index exists for this sort error
这个问题我已经看过很多次了,但我在这里问同样的问题。
为什么会出现此错误:
Error running query. Reason: (no_usable_index) No index exists for this sort try indexing by the sort fields.
我是 运行 具有超级账本结构的区块链服务,我正在为世界状态使用 CouchDB。在这些数据中,我有一个日期字段,我想按日期对数据进行排序。这是我的 Mango 查询:
{
"selector": {
"date": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"date"
],
"sort": [
{
"date": "asc"
}
]
}
需要说明的是,日期是一个字符串。自从我尝试了一切以来,我不知道这里发生了什么。我尝试使用 table 的任何字段进行排序,但唯一可以排序和工作的字段是:_id
我什至尝试了再次位于 _id
下的 _rev
字段,但仍然出错。
{
"selector": {
"_rev": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"_rev"
],
"sort": [
{
"_id": "asc"
},
{
"_rev": "asc"
}
]
}
这是我的数据示例:
{
"id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"key": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"value": {
"rev": "1-4f2cc5b932d393a88b3497a3942fff33"
},
"doc": {
"_id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"_rev": "1-4f2cc5b932d393a88b3497a3942fff33",
"company": "greenTea",
"date": "2022-02-04 15:40:23.337 +0000 UTC",
"fromacc": "Gary",
"operation": "",
"txid": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"type": "transaction",
"~version": "CgMBBwA="
}
}
我已经尝试了我在网上找到的任何东西,但我无法让它工作。
任何帮助或建议,甚至是好的文档,我们都将不胜感激。
谢谢
除了收集结果所需的完整 table 扫描之外,想象一下如果内存中有 100 亿个文档需要排序会发生什么。
如果要对字段进行排序,需要在date
上创建索引。
只需像这样添加一个索引。
{
"index": {
"fields": [
"date"
]
},
"name": "date-index"
}
你会发现这个查询成功了:
{
"selector": {
"date": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"date"
]
}
这个查询可能会有一些效率
{
"selector": {
"date": {
"$gte": 9
},
"_id": {
"$gte": 9
}
},
"fields": [
"_id",
"date"
]
}
由于两个字段都是字符串类型,见3.2.2.5. Collation Specification
这个问题我已经看过很多次了,但我在这里问同样的问题。
为什么会出现此错误:
Error running query. Reason: (no_usable_index) No index exists for this sort try indexing by the sort fields.
我是 运行 具有超级账本结构的区块链服务,我正在为世界状态使用 CouchDB。在这些数据中,我有一个日期字段,我想按日期对数据进行排序。这是我的 Mango 查询:
{
"selector": {
"date": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"date"
],
"sort": [
{
"date": "asc"
}
]
}
需要说明的是,日期是一个字符串。自从我尝试了一切以来,我不知道这里发生了什么。我尝试使用 table 的任何字段进行排序,但唯一可以排序和工作的字段是:_id
我什至尝试了再次位于 _id
下的 _rev
字段,但仍然出错。
{
"selector": {
"_rev": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"_rev"
],
"sort": [
{
"_id": "asc"
},
{
"_rev": "asc"
}
]
}
这是我的数据示例:
{
"id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"key": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"value": {
"rev": "1-4f2cc5b932d393a88b3497a3942fff33"
},
"doc": {
"_id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"_rev": "1-4f2cc5b932d393a88b3497a3942fff33",
"company": "greenTea",
"date": "2022-02-04 15:40:23.337 +0000 UTC",
"fromacc": "Gary",
"operation": "",
"txid": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
"type": "transaction",
"~version": "CgMBBwA="
}
}
我已经尝试了我在网上找到的任何东西,但我无法让它工作。 任何帮助或建议,甚至是好的文档,我们都将不胜感激。
谢谢
除了收集结果所需的完整 table 扫描之外,想象一下如果内存中有 100 亿个文档需要排序会发生什么。
如果要对字段进行排序,需要在date
上创建索引。
只需像这样添加一个索引。
{
"index": {
"fields": [
"date"
]
},
"name": "date-index"
}
你会发现这个查询成功了:
{
"selector": {
"date": {
"$gte": null
},
"_id": {
"$gte": null
}
},
"fields": [
"_id",
"date"
]
}
这个查询可能会有一些效率
{
"selector": {
"date": {
"$gte": 9
},
"_id": {
"$gte": 9
}
},
"fields": [
"_id",
"date"
]
}
由于两个字段都是字符串类型,见3.2.2.5. Collation Specification