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 一起工作。

此时我只想:

  1. 获取使用 API 浏览器 POST 编辑的两个测试文档。
  2. 了解这些 cloudant-connector GET 方法是否完全适用于 lb 版本 3。

我从命令行添加了一个 mongodb 数据源并编辑了模型-config.json 文件 datsource 参数指向 mongodb 数据库,然后执行类似的测试。使用 POST 按钮添加了两个文档,然后使用 GET 按钮单击 试试这个。它 returns 发布的两个文档,就像在 youtube 视频教程中一样。


更新更多线索

  1. 在 Cloudant 仪表板查询页面中有一个选择器。如果我对选择器进行了错误的更改,Cloudant returns 错误 "no_usable_index"。这意味着错误消息不是来自 Loopback,而是来自 Cloudant,而是通过 Loopback 传递的。

  2. 尽管 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