gpt4 book ai didi

node.js - docker 容器中的 couchdb : how to remove id from output

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:47 26 4
gpt4 key购买 nike

首先,我是 couchdb 的新手,也是一般数据库的新手。我在 docker 容器中设置了 couchdb 实例。我在同一个盒子里还有另一个 docker 容器,其中有一些与这个 couchdb 实例通信的 NodeJS 代码。

现在,我正在做基本的事情,例如添加条目和从数据库获取条目。为了获得参赛资格,我会这样做:

curl -X GET http://IP:5984/mydb/158

我得到的输出如下:

{"_id":"156", "_rev":"1-47c19c00bee6417f36c7db2bc8607468", "name":{"given":["Itisha"], "family":["Iyengar"]}, "dob":"1981-06-01", "phone":{"value":"tel:312-116-1123"}, "address":{"line["147leverettmailcenter"], "city":"Naperville", "state":"IL", "postalCode":"02770"}, "SID":""}

我将数据传递给另一个函数来进一步处理它。但是,我只想要实际数据,不需要 _id 和 _rev 等字段。我该怎么做? -

  1. 我在某处读到,我可以通过执行 http://localhost:5984/ 登录到 couchdb 实例。从安装它的机器。在这里,我可以编辑 get 脚本以使其仅返回数据并忽略 _id 和 _rev 字段。但是,我是从 Ubuntu 上的 docker 容器运行它。我无法访问可以进行此类更改的用户界面。有其他方法可以做到这一点吗?

  2. 如果没有,有没有办法解析输出并过滤掉 _id 和 _rev 字段?截至目前,我通过执行 String.splice() 并过滤掉数据(在 _id 和 _rev 字段之后)直到最后以粗略的方式执行此操作。但我认为这不是一个好方法,对于实际的生产代码来说绝对不是一个好主意。请提出建议。

提前致谢。

最佳答案

有多种方法可以实现此目的,具体取决于您的需求:

方法1

使用_find通过向/db/_find 发出 POST 请求并选择所需的字段

curl -X POST -d '{"fields": ["name", "family", "dob", "phone", "address", "SID"]}' http://IP:5984/mydb/_find

参数-d用于向POST请求发送数据。如果您运行的是 Windows,则可能需要转义引号。

方法2

使用 view function

方法3

使用简单的 Node 程序处理结果

const http = require("http");

http.get({
host: 'IP',
port: 5984
path: '/mydb/158'
}, function(response) {
var body = '';
response.on('data', function(d) {
body += d;
});

response.on('end', function() {
var parsed = JSON.parse(body);
var result = {};

for (var key in parsed) {
if (key != "_id" && key != "_rev") {
result[key] = parsed[key];
}
}

console.log(result);
});
}
);

上面的代码向您的 couchdb 服务器发出 GET 请求,解析 JSON 输出,并在忽略 _id 和 _rev 键后将结果放入新对象中。

方法4

将输出处理为字符串。正如您正确指出的那样,这不是一个好的解决方案。它很丑陋,但并不意味着它不能做到。您甚至可以通过 sed/awk/perl 传输输出并在那里处理字符串。

关于node.js - docker 容器中的 couchdb : how to remove id from output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52963005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com