【发布时间】: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 一起工作。
此时我只想:
- 获取已使用 API Explorer 发布的两个测试文档。
- 了解这些 cloudant-connector GET 方法是否完全适用于 lb 版本 3。
我从命令行添加了一个mongodb数据源并编辑了model-config.json文件datsource参数指向mongodb数据库,然后进行了类似的测试。使用 POST 按钮添加了两个文档,然后使用 GET 按钮单击 try this。它返回发布的两个文档,就像在 youtube 视频教程中一样。
更新更多线索
在 Cloudant 仪表板查询页面中有一个选择器。如果我对选择器进行错误更改,Cloudant 将返回错误“no_usable_index”。这意味着错误消息不是来自 Loopback,而是来自 Cloudant,而是通过 Loopback 传递的。
虽然 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
【问题讨论】:
-
您的查询是什么样的?
-
@A.J.Alger myurlhere.io/api/centers
标签: loopbackjs cloudant loopback