couchdb в Docker-контейнере: как удалить id из вывода - PullRequest
0 голосов
/ 24 октября 2018

Начнем с того, что я новичок в couchdb и новичок в базах данных в целом. У меня есть настройка экземпляра couchdb в контейнере Docker.У меня есть еще один докер-контейнер в том же окне, в котором есть некоторый код nodeJS, который обращается к этому экземпляру couchdb.

Теперь я занимаюсь базовыми вещами, такими как добавление записи и получение записи из базы данных.Чтобы получить запись, вот что я делаю:

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. Я где-то читал, что могу войти в экземпляр couchdb, выполнив http://localhost:5984/ с машины, на которой он установлен.Здесь я могу отредактировать скрипт get, чтобы он возвращал только данные и игнорировал поля _id и _rev.Тем не менее, я запускаю его из док-контейнера в Ubuntu.У меня нет доступа к пользовательскому интерфейсу, через который я могу вносить такие изменения.Есть ли альтернативный способ сделать это?

  2. Если нет, есть ли способ проанализировать вывод и отфильтровать поля _id и _rev?На данный момент я делаю это грубым образом, выполняя String.splice () и отфильтровывая данные (после полей _id и _rev) до конца.Но я не думаю, что это хороший способ сделать это и определенно не очень хорошая идея для реального производственного кода.Пожалуйста, предложите.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 октября 2018

Есть несколько способов добиться этого, в зависимости от ваших потребностей:

метод 1

Используйте _find , отправив запрос POST в / db / _find и выберитетребуемые поля

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

Параметр -d используется для отправки данных в запрос POST.Возможно, вам придется избежать кавычек, если вы используете Windows.

метод 2

Использование функции просмотра

метод 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);
       });
    }
);

Приведенный выше код отправляет запрос GET на ваш сервер couchdb, анализирует вывод JSON и помещает результаты в новый объект после игнорирования ключей _id и _rev.

метод 4

Обрабатывать вывод в виде строки.Как вы правильно заметили, это не очень хорошее решение.Это некрасиво, но это не значит, что это невозможно сделать.Вы можете даже передать вывод через sed/awk/perl и обработать строку там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...