2009-04-26 13 views

risposta

2

Tale oggetto JSON non sarà accettato da CouchDB. Per memorizzare tutti i dati con un singolo uso richiesta del server:

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

In alternativa, inviare una richiesta CouchDB diverso per ogni riga.

Importare il file in CouchDB dalla riga di comando utilizzando 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

mio DB :: :: CouchDB modulo Schema ha uno script per aiutare con il caricamento di una serie di documenti in un database CouchDB. Lo script couch_schema_tool.pl accetta un file come argomento e carica tutti i documenti in quel file nel database. Basta mettere ogni documento in un array in questo modo:

[ { "name": "bob", "ciao": "ciao"}, { "name": "ciao", "ciao": "bye "} ]

Li caricherà nel database per voi. Piccolo avvertimento anche se non ho testato il mio ultimo codice contro l'ultimo di CouchDB quindi se lo usi e si rompe allora fammi sapere. Probabilmente dovrò cambiare qualcosa per adattarlo alle nuove modifiche API.

Jeremy

5

Se siete su Linux, è possibile scrivere uno script di shell veloce per pubblicare il contenuto dei file JSON validi Couch.

Per testare divano che ho fatto qualcosa di simile:

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

myFile.json ha il contenuto JSON ho voluto importare nel database.

Un'altra alternativa, se non ti piace riga di comando o non si utilizza Linux, e preferisce un'interfaccia grafica, è possibile utilizzare uno strumento come RESTClient

+0

Per tutti coloro che cercano "POST": fa parte del pacchetto libwww-perl. – ofrommel

3

Sì, questo non è JSON valida ...

Per importare JSON-oggetti che uso ricciolo (http://curl.haxx.se):

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

dove my.json è un file JSON-Object è in. Naturalmente si può mettere il JSON-Object direttamente in CouchDB (senza un file) così:

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

Se non si dispone di un doc_id, si può chiedere CouchDB per esso:

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

Per chiunque abbia avuto un errore su Content-Type nel primo esempio qui, prova questo: 'curl -X POST -d @ data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Content-Type : application/json'' –

+0

Downvoted perché penso che la domanda sia la domanda su più documenti e non solo uno. Credo che tu stia rispondendo come importare solo un documento. –

6

a partire da @Millhouse risposta, ma con più documenti in mio file ho usato

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

POST è un alias di lwp-request ma POST fa non sembra funzionare su debian. Se si utilizza lwp-request è necessario impostare il metodo con -m come sopra.

Il file finale _bulk_docs consente di caricare più documenti contemporaneamente.

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

+0

l'api bulk_doc dovrebbe avere tutti i documenti annidati all'interno di un oggetto {{docs ": [documents]}'. –

2

Non è la mia soluzione, ma ho trovato questo per risolvere il mio problema:

Un modo semplice di esportare un database CouchDB in un file, è quello di eseguire il seguente comando Curl nella finestra del terminale:

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

passo successivo è quello di modificare il file jSON esportato per sembrare qualcosa di simile al di sotto (notare il _id):

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

Il bit principale che è necessario esaminare è aggiungere i documenti nel blocco di codice "docs". Una volta fatto questo è possibile eseguire il seguente comando Curl per importare i dati in un database CouchDB:

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

Duplicazione di un database di Se si desidera duplicare un database da un server a un altro. Eseguire il seguente comando:

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/"}' 

originale del messaggio: http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php

2

Probabilmente un po 'tardi per rispondere. Ma se è possibile utilizzare Python di quanto si può utilizzare il modulo CouchDB a farlo:

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) 

ho creato lo script python per farlo (come io non sono riuscito a trovare uno su Internet).

Lo script completo è qui::

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

(nome -> jsonDb_to_Couch.py)

Se si scarica la piena pronti contro termine e:

  1. Testo sostituire tutte le "_id" nei file JSON per "id"

  2. Run rendere load_dbs

Creerebbe 4 database nell'installazione del tuo divano locale

Speranza che aiuti i neofiti (come me)

+1

Credo che il tuo codice debba avere le seguenti modifiche: 'couch = couchdb.server ()' url mancante 'con parentesi chiusa aperta (

+0

Grazie Jared. Risolto il problema nel post originale. – Tanmay