loopback API GET 没有可用的 cloudant 数据库索引
loopback API GET no usable index for cloudant database
使用 Loopback API explorer GET 试试这个 按钮带和不带过滤器,我得到结果 no_usable_index:
{
"error": {
"statusCode": 400,
"name": "Error",
"message": "No index exists for this sort, try indexing by the sort fields.",
"error": "no_usable_index",
"reason": "No index exists for this sort, try indexing by the sort fields.",
"scope": "couch",
"request": {
"method": "post",
"headers": {
"content-type": "application/json",
"accept": "application/json"
},
"uri": "https://XXXXXX:XXXXXX@long-instance-id-number-bluemix.cloudant.com/aac_001_dev_db/_find",
"body": "{\"selector\":{\"loopback__model__name\":\"Center\"},\"use_index\":[\"lb-index-ddoc-Center\",\"lb-index-Center\"],\"sort\":[{\"id:string\":\"asc\"}]}"
},
"headers": {
"x-frame-options": "DENY",
"x-couch-request-id": "658ac2fdf8",
"date": "Tue, 06 Mar 2018 17:45:29 GMT",
"content-type": "application/json",
"cache-control": "must-revalidate",
"strict-transport-security": "max-age=31536000",
"x-content-type-options": "nosniff",
"x-cloudant-request-class": "query",
"x-cloudant-backend": "bm-cc-us-south-02",
"via": "1.1 lb1.bm-cc-us-south-02 (Glum/1.50.1)",
"statusCode": 400,
"uri": "https://XXXXXX:XXXXXX@long-instance-id-number-bluemix.cloudant.com/aac_001_dev_db/_find"
},
"errid": "non_200",
"description": "couch returned 400",
"stack": "Error: No index exists for this sort, try indexing by the sort fields.\n at Request._callback (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/cloudant-nano/lib/nano.js:248:15)\n at Request.self.callback (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:186:22)\n at emitTwo (events.js:106:13)\n at Request.emit (events.js:191:7)\n at Request.<anonymous> (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:1163:10)\n at emitOne (events.js:96:13)\n at Request.emit (events.js:188:7)\n at IncomingMessage.<anonymous> (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:1085:12)\n at IncomingMessage.g (events.js:292:16)\n at emitNone (events.js:91:20)\n at IncomingMessage.emit (events.js:185:7)\n at endReadableNT (_stream_readable.js:974:12)\n at _combinedTickCallback (internal/process/next_tick.js:80:11)\n at process._tickCallback (internal/process/next_tick.js:104:9)"
}
}
所以我尝试搜索 lb3 文档并找到了一个 cloudant-connector loopback.io / doc / en / lb3 / Cloudant-connector.html#index
,它将 index 功能描述为 "To be updated"。嗯,它被列为功能积压。
然后我发现 [:link:][2] 到描述手动添加 indexes
属性 的模型定义-JSON 文件。我试过了:
// common -> models -> center.json
"indexes": {
"name_index": {"name": 1}
}, ...
我也尝试了这个建议:"You can specify indexes at the model property level too, for example:"
"properties": {
"name": {
"type": "string",
"required": true,
"index": true // added this (but without the comment :)
}, ...
唉,none 这些尝试都奏效了。我仍然收到错误消息。
我在 MongoDB 上观看了几个关于 Loopback 的离题 youtube 视频,但奇怪的是没有太多可用的内容来展示如何让 Loopback 连接器与 Cloudant 一起工作。
此时我只想:
- 获取使用 API 浏览器 POST 编辑的两个测试文档。
- 了解这些 cloudant-connector GET 方法是否完全适用于 lb 版本 3。
我从命令行添加了一个 mongodb 数据源并编辑了模型-config.json 文件 datsource
参数指向 mongodb 数据库,然后执行类似的测试。使用 POST 按钮添加了两个文档,然后使用 GET 按钮单击 试试这个。它 returns 发布的两个文档,就像在 youtube 视频教程中一样。
更新更多线索
在 Cloudant 仪表板查询页面中有一个选择器。如果我对选择器进行了错误的更改,Cloudant returns 错误 "no_usable_index"。这意味着错误消息不是来自 Loopback,而是来自 Cloudant,而是通过 Loopback 传递的。
尽管 Loopback 浏览器对于 mongo-connector 和 cloudant-connector 具有相同的视觉外观;数据库的 url (REST) 接口显然必须不同。我假设 POST、GET 按钮点击序列在资源管理器中用于连接 Mongodb 将适用于 Cloudant。它不是。 Cloudant 要求数据库中提供设计文档以定义有效查询。
我确定可以从命令行访问数据库:
$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE
并在数据库中定义了设计文档
$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE/_design/$DDOC_MEDICAL_CENTERS/_view/$VIEW_MEDICAL_CENTERS_TRUE
在旧版本中进行了大量故障排除后,我发现更改后错误消失了
从 loopback-connector-cloudant@1.2.5
2017 年 8 月 3 日
至 loopback-connector-cloudant@2.0.5
2018 年 3 月 23 日
通过更新 package.json 和 运行 和 npm update
使用 Loopback API explorer GET 试试这个 按钮带和不带过滤器,我得到结果 no_usable_index:
{
"error": {
"statusCode": 400,
"name": "Error",
"message": "No index exists for this sort, try indexing by the sort fields.",
"error": "no_usable_index",
"reason": "No index exists for this sort, try indexing by the sort fields.",
"scope": "couch",
"request": {
"method": "post",
"headers": {
"content-type": "application/json",
"accept": "application/json"
},
"uri": "https://XXXXXX:XXXXXX@long-instance-id-number-bluemix.cloudant.com/aac_001_dev_db/_find",
"body": "{\"selector\":{\"loopback__model__name\":\"Center\"},\"use_index\":[\"lb-index-ddoc-Center\",\"lb-index-Center\"],\"sort\":[{\"id:string\":\"asc\"}]}"
},
"headers": {
"x-frame-options": "DENY",
"x-couch-request-id": "658ac2fdf8",
"date": "Tue, 06 Mar 2018 17:45:29 GMT",
"content-type": "application/json",
"cache-control": "must-revalidate",
"strict-transport-security": "max-age=31536000",
"x-content-type-options": "nosniff",
"x-cloudant-request-class": "query",
"x-cloudant-backend": "bm-cc-us-south-02",
"via": "1.1 lb1.bm-cc-us-south-02 (Glum/1.50.1)",
"statusCode": 400,
"uri": "https://XXXXXX:XXXXXX@long-instance-id-number-bluemix.cloudant.com/aac_001_dev_db/_find"
},
"errid": "non_200",
"description": "couch returned 400",
"stack": "Error: No index exists for this sort, try indexing by the sort fields.\n at Request._callback (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/cloudant-nano/lib/nano.js:248:15)\n at Request.self.callback (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:186:22)\n at emitTwo (events.js:106:13)\n at Request.emit (events.js:191:7)\n at Request.<anonymous> (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:1163:10)\n at emitOne (events.js:96:13)\n at Request.emit (events.js:188:7)\n at IncomingMessage.<anonymous> (/home/ubuntu/workspace/aac-001-api/node_modules/loopback-connector-cloudant/node_modules/cloudant/node_modules/request/request.js:1085:12)\n at IncomingMessage.g (events.js:292:16)\n at emitNone (events.js:91:20)\n at IncomingMessage.emit (events.js:185:7)\n at endReadableNT (_stream_readable.js:974:12)\n at _combinedTickCallback (internal/process/next_tick.js:80:11)\n at process._tickCallback (internal/process/next_tick.js:104:9)"
}
}
所以我尝试搜索 lb3 文档并找到了一个 cloudant-connector loopback.io / doc / en / lb3 / Cloudant-connector.html#index
,它将 index 功能描述为 "To be updated"。嗯,它被列为功能积压。
然后我发现 [:link:][2] 到描述手动添加 indexes
属性 的模型定义-JSON 文件。我试过了:
// common -> models -> center.json
"indexes": {
"name_index": {"name": 1}
}, ...
我也尝试了这个建议:"You can specify indexes at the model property level too, for example:"
"properties": {
"name": {
"type": "string",
"required": true,
"index": true // added this (but without the comment :)
}, ...
唉,none 这些尝试都奏效了。我仍然收到错误消息。
我在 MongoDB 上观看了几个关于 Loopback 的离题 youtube 视频,但奇怪的是没有太多可用的内容来展示如何让 Loopback 连接器与 Cloudant 一起工作。
此时我只想:
- 获取使用 API 浏览器 POST 编辑的两个测试文档。
- 了解这些 cloudant-connector GET 方法是否完全适用于 lb 版本 3。
我从命令行添加了一个 mongodb 数据源并编辑了模型-config.json 文件 datsource
参数指向 mongodb 数据库,然后执行类似的测试。使用 POST 按钮添加了两个文档,然后使用 GET 按钮单击 试试这个。它 returns 发布的两个文档,就像在 youtube 视频教程中一样。
更新更多线索
在 Cloudant 仪表板查询页面中有一个选择器。如果我对选择器进行了错误的更改,Cloudant returns 错误 "no_usable_index"。这意味着错误消息不是来自 Loopback,而是来自 Cloudant,而是通过 Loopback 传递的。
尽管 Loopback 浏览器对于 mongo-connector 和 cloudant-connector 具有相同的视觉外观;数据库的 url (REST) 接口显然必须不同。我假设 POST、GET 按钮点击序列在资源管理器中用于连接 Mongodb 将适用于 Cloudant。它不是。 Cloudant 要求数据库中提供设计文档以定义有效查询。
我确定可以从命令行访问数据库:
$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE
并在数据库中定义了设计文档
$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE/_design/$DDOC_MEDICAL_CENTERS/_view/$VIEW_MEDICAL_CENTERS_TRUE
在旧版本中进行了大量故障排除后,我发现更改后错误消失了
从 loopback-connector-cloudant@1.2.5
2017 年 8 月 3 日
至 loopback-connector-cloudant@2.0.5
2018 年 3 月 23 日
通过更新 package.json 和 运行 和 npm update