首先,我是不熟悉长沙发的人,而对于数据库来说是新的。我在Docker容器中有一个长沙发实例的设置。我在同一框中有另一个Docker容器,其中有一些与此JSbeddb实例通信的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之类的字段,该怎么办? -
我读到某处可以通过从安装它的计算机上执行http://localhost:5984/登录到沙发数据库实例。在这里,我可以编辑get脚本,使其仅返回数据,而忽略_id和_rev字段。但是,我是从Ubuntu上的docker容器运行它的。我无权访问可以进行此类更改的UI。有替代方法吗?
如果没有,是否可以解析输出并过滤出_id和_rev字段?到目前为止,我通过执行String.splice()并过滤掉数据(在_id和_rev字段之后)直到结尾,以粗略的方式进行了此操作。但是我认为这不是执行此操作的好方法,对于实际的生产代码绝对不是一个好主意。 请提出建议。
谢谢。
答案 0 :(得分:1)
有多种方法可以实现此目的,具体取决于您的需求:
通过向/ db / _find发出POST请求来使用_find并选择所需的字段
curl -X POST -d '{"fields": ["name", "family", "dob", "phone", "address", "SID"]}' http://IP:5984/mydb/_find
参数-d
用于将数据发送到POST请求。
如果您正在运行Windows,则可能需要对引号进行转义。
使用简单的节点程序处理结果
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);
});
}
);
上面的代码向您的benchdb服务器发出GET请求,解析JSON输出,并在忽略_id和_rev键之后将结果放入一个新对象中。
将输出作为字符串处理。正如您正确指出的那样,这不是一个好的解决方案。这很丑陋,但这并不意味着它无法完成。您甚至可以通过sed/awk/perl
用管道传输输出并在那里处理字符串。