Jeśli mam plik json, który wygląda mniej więcej tak:import plik json do Kanapa db-
{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
Czy istnieje możliwość importowania to pod CouchDB?
Jeśli mam plik json, który wygląda mniej więcej tak:import plik json do Kanapa db-
{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
Czy istnieje możliwość importowania to pod CouchDB?
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
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
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
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
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'' –
Rewizja, ponieważ myślę, że pytanie dotyczy wielu dokumentów, a nie tylko jednego. Wierzę, że odpowiadasz, jak zaimportować tylko jeden dokument. –
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.
api bulk_doc powinny mieć wszystkie dokumenty zagnieżdżone wewnątrz obiektu '{" docs ": [dokumenty]}'. –
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
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:
Tekst wymienić wszystkie "_id" w plikach json do "id"
Run zrobić load_dbs
Stworzyłoby to 4 bazy danych w lokalnej instalacji kanapy
Nadzieję, że pomaga początkującym (np. ja)
Wierzę, że Twój kod powinien mieć następujące zmiany: 'couch = couchdb.server (
Dzięki Jared. Naprawiono go w oryginalnym poście. – Tanmay
Dla wszystkich poszukujących "POST": jest częścią pakietu libwww-perl. – ofrommel