2009-04-26 26 views

Odpowiedz

2

Ten obiekt JSON nie zostanie zaakceptowany przez CouchDB. Aby przechowywać wszystkie dane za pomocą pojedynczego żądania serwera, należy użyć:

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

Można również przesłać inne żądanie CouchDB dla każdego wiersza.

zaimportować plik do CouchDB z linii poleceń za pomocą cURL:

curl -vX POST https://user:[email protected]:1234/database \ 
    -d @- -# -o output -H "Content-Type: application/json" < file.json 
0

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

Moja DB :: CouchDB :: moduł Schema ma skrypt, aby pomóc w załadunku szereg dokumentów do baza danych CouchDB. Skrypt couch_schema_tool.pl akceptuje plik jako argument i ładuje wszystkie dokumenty z tego pliku do bazy danych. Wystarczy umieścić każdy dokument do tablicy tak:

[ { "name": "bob", "Hi": "cześć"}, { "name": "Hello", "Hi": "bye "} ]

Załaduje je do bazy danych. Małe zastrzeżenie, ale nie przetestowałem mojego najnowszego kodu przeciwko najnowszej wersji CouchDB, więc jeśli go użyjesz i się zepsuje, daj mi znać. Prawdopodobnie muszę zmienić coś, aby pasowało do nowych zmian API.

Jeremy

5

Jeśli jesteś na Linuksie, można napisać krótki skrypt, aby umieścić zawartość ważnych plików json do Kanapie.

Aby przetestować kanapy zrobiłem coś takiego:

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

myFile.json ma zawartość json chciałem zaimportować do bazy danych.

Inną alternatywą, jeśli nie lubią linii poleceń lub nie używasz Linuksa, i wolą gui, można użyć narzędzia takie jak RESTClient

+0

Dla wszystkich poszukujących "POST": jest częścią pakietu libwww-perl. – ofrommel

3

Tak, to nie jest ważne JSON ...

celu importowania JSON obiektów użyć zwijanie (technika http://curl.haxx.se)

curl -X PUT -d @my.json http://admin:[email protected]:5984/db_name/doc_id 

gdzie my.json plik jest JSON-obiekt jest. Oczywiście można umieścić JSON-Object bezpośrednio do CouchDB (bez pliku), a także:

curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:[email protected]:5984/db_name/doc_id 

Jeśli nie masz DOC_ID, można poprosić CouchDB dla niego:

curl -X GET http://127.0.0.1:5984/_uuids?count=1 
+0

Dla każdego, kto ma błąd dotyczący Content-Type w pierwszym przykładzie tutaj, spróbuj tego: 'curl -X POST -d @ data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Content-Type : application/json'' –

+0

Rewizja, ponieważ myślę, że pytanie dotyczy wielu dokumentów, a nie tylko jednego. Wierzę, że odpowiadasz, jak zaimportować tylko jeden dokument. –

6

począwszy od @Millhouse odpowiedź, ale z wieloma docs w moim pliku użyłem

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

POST jest aliasem lwp-request ale POST robi nie działa na debian. Jeśli używasz lwp-request, musisz ustawić metodę z -m jak wyżej.

Końcowy _bulk_docs umożliwia jednoczesne przesyłanie wielu dokumentów.

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

+0

api bulk_doc powinny mieć wszystkie dokumenty zagnieżdżone wewnątrz obiektu '{" docs ": [dokumenty]}'. –

2

To nie jest moje rozwiązanie, ale znalazłem to rozwiązać mój problem:

Prostym sposobem eksportowania bazy couchdb do pliku, to uruchamiając następujące Curl polecenie w oknie terminala:

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

Następny krok polega na modyfikacji wyeksportowany plik json wyglądać coś jak poniżej (uwaga _id):

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

Głównym bitem, na który należy zwrócić uwagę, jest dodanie dokumentów do bloku kodu "docs". Po wykonaniu tych czynności można uruchomić następujące polecenie Curl importować dane do bazy danych couchdb:

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

Powielanie bazy Jeśli chcesz duplikat bazy danych z jednego serwera na inny. Uruchom następujące polecenie:

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

Original post: http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php

2

Prawdopodobnie nieco późno, by odpowiedzieć. Ale jeśli można użyć Pythona niż można użyć couchdb moduł zrobić tak:

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) 

stworzyłem skrypt Pythona to zrobić (jak nie mogłem znaleźć w internecie).

Pełny skrypt jest tu::

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

(nazwa -> jsonDb_to_Couch.py)

Jeśli pobrać pełną repo oraz:

  1. Tekst wymienić wszystkie "_id" w plikach json do "id"

  2. Run zrobić load_dbs

Stworzyłoby to 4 bazy danych w lokalnej instalacji kanapy

Nadzieję, że pomaga początkującym (np. ja)

+1

Wierzę, że Twój kod powinien mieć następujące zmiany: 'couch = couchdb.server ()' brakujący URL 'z otwartym ()' zamknij nawias zamiast nawiasu 'db_entry = json.loads (row)' ładuje zamiast obciążenia –

+0

Dzięki Jared. Naprawiono go w oryginalnym poście. – Tanmay