问题描述
我需要以 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
由于此功能已被弃用,最好将此逻辑放在您的应用程序中。