docker容器中的ouchdb:如何从输出中删除ID

时间:2018-10-24 07:16:49

标签: node.js docker couchdb

首先,我是不熟悉长沙发的人,而对于数据库来说是新的。我在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之类的字段,该怎么办? -

  1. 我读到某处可以通过从安装它的计算机上执行http://localhost:5984/登录到沙发数据库实例。在这里,我可以编辑get脚本,使其仅返回数据,而忽略_id和_rev字段。但是,我是从Ubuntu上的docker容器运行它的。我无权访问可以进行此类更改的UI。有替代方法吗?

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

方法1

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

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

参数-d用于将数据发送到POST请求。 如果您正在运行Windows,则可能需要对引号进行转义。

方法2

使用view function

方法3

使用简单的节点程序处理结果

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键之后将结果放入一个新对象中。

方法4

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