以JSON格式显示CouchDB的文档

问题描述

我需要以 JSON 格式获取文档

视图如下图

function (doc) {
  emit(doc._id); 
}

设计文档如下图

  {
  "_id": "_design/rtls","_rev": "14-cad60060017c38957f6e4388cb37914b","views": {
    "rtls": {
      "map": "function (doc) {\n  emit(doc._id);\n}"
    }
  },"language": "javascript"
}

当我获得以下链接的以下数据时`http://127.0.0.1:5984/rtls/_design/rtls/_view/rtls?include_docs=true

{"total_rows":4,"offset":0,"rows":[
{"id":"1","key":"1","value":null,"doc":{
    "_id":"1","_rev":"39-6ff9597a13572e831728c2e2631eb425","al":[{
         "id16":"0x3f1a","pos":{"x":17.49,"y":10.97,"z":0.01}}],"tl":[],"Timestamp":272179.0,"Oid":"apoorva-VirtualBox","resultTime":"2021-01-03T23:02:29.059Z"}
 }
........
]}

但我需要以下格式

[
{"id":"1","_id":"1","_rev":"39","al":[{
      "id16":"0x3f1a","resultTime":"2021-01-03T23:02:29.059Z"
}
]

我对 CouchDB 非常陌生。任何输入表示赞赏。 提前致谢。

解决方法

CouchDB 提供 list functions 来转换视图结果。正如您在文档中所看到的,这些函数在 CouchDB 3.x 中已被弃用,并将在 4.x 中删除。你可以在短期内解决需求,但最好不要长期依赖它

尝试在您的设计文档中定义一个列表函数,就像这样(“lists”元素):

   {
  "_id": "_design/rtls","views": {
    "rtls": {
      "map": "function (doc) {\n  emit(doc._id,1);\n}"
    }
  },"lists": {
    "doc-list": "function (head,req) { start({'headers': {'Content-Type': 'application/json'}});  var row; var docs=[]; while (row = getRow()) {docs.push(row.doc)}; send(toJSON(docs));  }"
  },"language": "javascript"
}

并使用此操作查询数据库

/db/_design/rtls/_list/doc-list/rtls?include_docs=true

由于此功能已被弃用,最好将此逻辑放在您的应用程序中。