【问题标题】:loopback API GET no usable index for cloudant databaseloopback API GET 没有用于 cloudant 数据库的可用索引
【发布时间】:2018-08-08 15:18:00
【问题描述】:

使用 Loopback API explorer GET try this 按钮,无论是否使用过滤器,我都会得到结果 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 功能描述为“待更新”。嗯,它被列为功能积压。

然后我在 Model-definition-JSON 文件中找到了 [:link:][2],该文件描述了手动添加 indexes 属性。我试过了:

  // common -> models -> center.json
  "indexes": {
      "name_index": {"name": 1}
  }, ...

我也试过这个建议:“你也可以在模型属性级别指定索引,例如:”

  "properties": {
    "name": {
      "type": "string",
      "required": true,
      "index": true   // added this (but without the comment :)
    }, ...

唉,这些尝试都没有奏效。我仍然收到错误消息。

我已经观看了几个关于 Loopback 与 MongoDB 的主题 youtube 视频,但奇怪的是,没有太多可用的内容显示如何让 Loopback-connector 与 Cloudant 一起工作。

此时我只想:

  1. 获取已使用 API Explorer 发布的两个测试文档。
  2. 了解这些 cloudant-connector GET 方法是否完全适用于 lb 版本 3。

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


更新更多线索

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

  2. 虽然 Loopback 资源管理器对于 mongo-connector 和 cloudant-connector 具有相同的视觉外观;数据库的 url (REST) 接口显然必须不同。我假设用于连接 Mongodb 的资源管理器中的 POST、GET 按钮单击序列可以与 Cloudant 一起使用。它不是。 Cloudant 要求数据库中提供设计文档以定义有效查询。


我确定可以通过以下命令行访问数据库:

$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE

并在数据库中定义设计文档

$ curl $CLOUDANT_URL/$CLOUDANT_DATABASE/_design/$DDOC_MEDICAL_CENTERS/_view/$VIEW_MEDICAL_CENTERS_TRUE

【问题讨论】:

标签: loopbackjs cloudant loopback


【解决方案1】:

在旧版本中经过多次故障排除后,我发现更改后错误消失了

发件人 loopback-connector-cloudant@1.2.5 2017 年 8 月 3 日

loopback-connector-cloudant@2.0.5 2018 年 3 月 23 日

通过更新 package.json 并运行 npm update

【讨论】:

  • 这为我解决了这个问题。看起来通过环回 CLI 使用 loopback-cloudant-connector 会错误地拉出过时的连接器。
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多