импортировать JSON-файл на диван DB- - PullRequest
10 голосов
/ 26 апреля 2009

Если у меня есть файл json, который выглядит примерно так:

{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}

Есть ли возможность импортировать это в couchdb?

Ответы [ 7 ]

6 голосов
/ 20 апреля 2013

Начиная с ответа @Millhouse, но с несколькими документами в моем файле я использовал

cat myFile.json | lwp-request -m POST -sS "http://localhost/dbname/_bulk_docs" -c "application/json" 

POST - это псевдоним lwp-request, но POST, похоже, не работает на debian. Если вы используете lwp-request, вам нужно установить метод с помощью -m, как указано выше.

Трейлинг _bulk_docs позволяет загружать сразу несколько документов.

http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API

5 голосов
/ 15 марта 2011

Если вы работаете в Linux, вы можете написать быстрый сценарий оболочки для POST содержимого допустимых файлов json в Couch.

Для проверки кушетки я сделал что-то вроде этого:

cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json"

myFile.json содержит содержимое json, которое я хотел импортировать в базу данных.

Другой вариант, если вам не нравится командная строка или вы не используете Linux и предпочитаете графический интерфейс, вы можете использовать инструмент, такой как RESTClient

3 голосов
/ 26 марта 2012

Да, это не допустимый JSON ...

Для импорта JSON-объектов я использую curl (http://curl.haxx.se):

curl -X PUT -d @my.json http://admin:secret@127.0.0.1:5984/db_name/doc_id

где my.json - это файл, в котором находится JSON-объект. Конечно, вы можете поместить ваш JSON-объект непосредственно в couchdb (без файла):

curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:secret@127.0.0.1:5984/db_name/doc_id

Если у вас нет doc_id, вы можете попросить couchdb:

curl -X GET http://127.0.0.1:5984/_uuids?count=1
2 голосов
/ 03 апреля 2016

Наверное, немного поздно, чтобы ответить. Но если вы можете использовать Python, тогда вы можете использовать модуль couchdb для этого:

import couchdb
import json
couch = couchdb.Server(<your server url>)
db = couch[<your db name>]
with open(<your file name>) as jsonfile:
    for row in jsonfile:
        db_entry = json.load(row)
        db.save(db_entry)

Я создал скрипт Python для этого (так как я не смог найти его в Интернете).

Полный скрипт здесь::

http://bitbucket.org/tdatta/tools/src/

(имя -> jsonDb_to_Couch.py)

Если вы загрузите полный репо и:

  1. Текст заменяет все "_id" в файлах json на "id"

  2. Запустить make load_dbs

Это создаст 4 базы данных в вашей локальной установке

Надеюсь, что помогает новичкам (как я)

2 голосов
/ 02 сентября 2014

Это не мое решение, но я нашел это, чтобы решить мою проблему:

Простой способ экспорта базы данных CouchDB в файл - это запустить следующую команду Curl в окне терминала:

curl -X GET http://127.0.0.1:5984/[mydatabase]/_all_docs\?include_docs\=true > /Users/[username]/Desktop/db.json

Следующий шаг - изменить экспортированный файл json, чтобы он выглядел примерно так, как показано ниже (обратите внимание на _id):

{
  "docs": [
      {"_id": "0", "integer": 0, "string": "0"},
      {"_id": "1", "integer": 1, "string": "1"},
      {"_id": "2", "integer": 2, "string": "2"}
  ]
}

Основной бит, на который вам нужно обратить внимание, - это добавление документов в блок кода «docs». После этого вы можете запустить следующую команду Curl, чтобы импортировать данные в базу данных CouchDB:

curl -d @db.json -H "Content-type: application/json" -X POST http://127.0.0.1:5984/[mydatabase]/_bulk_docs

Дублирование базы данных Если вы хотите дублировать базу данных с одного сервера на другой. Выполните следующую команду:

curl -H 'Content-Type: application/json' -X POST http://localhost:5984/_replicate -d ' {"source": "http://example.com:5984/dbname/", "target": "http://localhost@:5984/dbname/"}'

Исходное сообщение: http://www.greenacorn -websolutions.com / CouchDB / экспорт-импорт-а-база-с couchdb.php

2 голосов
/ 26 апреля 2009

Этот объект JSON не будет принят CouchDB. Для хранения всех данных с помощью одного запроса к серверу используйте:

{
  "people": 
   [
      {
        "name":"bob",
        "hi":"hello"
      },
      { 
        "name":"hello",
        "hi":"bye"
      }
   ]
}

В качестве альтернативы, отправьте разные запросы CouchDB для каждой строки.

Импортируйте файл в CouchDB из командной строки, используя cURL:

curl -vX POST https://user:pass@127.0.0.1:1234/database \
  -d @- -# -o output -H "Content-Type: application/json" < file.json
0 голосов
/ 26 мая 2009

http://github.com/zaphar/db-couchdb-schema/tree/master

В модуле My DB :: CouchDB :: Schema есть скрипт, помогающий загрузить серию документов в базу данных CouchDB. Сценарий couch_schema_tool.pl принимает файл в качестве аргумента и загружает все документы в этом файле в базу данных. Просто поместите каждый документ в массив следующим образом:

[ { "Имя": "боб", "привет": "привет"}, { "Имя": "привет", "привет": "До свидания"} ]

Он загрузит их в базу данных для вас. Небольшое предостережение, хотя я не проверял свой последний код с последним CouchDB, поэтому, если вы используете его, и он ломается, дайте мне знать Возможно, мне нужно что-то изменить, чтобы соответствовать новым изменениям API.

Джереми

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