Si tengo un archivo JSON que se ve algo como esto:importación de sofá DB
{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
¿Existe una opción para importar esto en couchdb?
Si tengo un archivo JSON que se ve algo como esto:importación de sofá DB
{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
¿Existe una opción para importar esto en couchdb?
Ese objeto JSON no será aceptado por CouchDB. Para almacenar todos los datos con una sola solicitud de servidor, use:
{
"people":
[
{
"name":"bob",
"hi":"hello"
},
{
"name":"hello",
"hi":"bye"
}
]
}
Como alternativa, envíe una solicitud de CouchDB diferente para cada fila.
Importe el archivo en CouchDB desde la línea de comandos usando 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
Mi DB :: :: CouchDB módulo de esquema tiene una secuencia de comandos para ayudar con la carga de una serie de documentos en una base de datos CouchDB. El script couch_schema_tool.pl acepta un archivo como argumento y carga todos los documentos en ese archivo en la base de datos. Sólo hay que poner cada documento en una matriz de este modo:
[ { "name": "bob", "Hola": "hola"}, { "name": "hola", "Hola": "bye "} ]
Se cargarán en la base de datos por usted. Aunque no he probado mi último código contra la última versión de CouchDB, si lo usa y se rompe, hágamelo saber. Probablemente tenga que cambiar algo para adaptarse a los nuevos cambios de API.
Jeremy
Si está en Linux, se podría escribir un script de shell rápida para publicar el contenido de los archivos JSON válidas para Couch.
Para probar sofá hice algo como esto:
cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json"
myFile.json tiene el contenido JSON que quería importar a la base de datos.
Otra alternativa, si no te gusta la línea de comandos o no está usando Linux, y prefiere una interfaz gráfica de usuario, puede utilizar una herramienta como RESTClient
Sí, esto no es válida ... JSON
Para importar objetos JSON-yo uso rizo (http://curl.haxx.se):
curl -X PUT -d @my.json http://admin:[email protected]:5984/db_name/doc_id
donde my.json es un archivo JSON a objetos es en. Por supuesto, usted puede poner su JSON a objetos directamente en couchdb (sin un archivo), así:
curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:[email protected]:5984/db_name/doc_id
Si usted no tiene un doc_id, puede pedir couchdb para ello:
curl -X GET http://127.0.0.1:5984/_uuids?count=1
Para cualquier otra persona que obtenga un error sobre Content-Type en el primer ejemplo aquí, intente esto: 'curl -X POST -d @ data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Content-Type : application/json'' –
Downvoted porque creo que la pregunta es para múltiples documentos y no solo uno. Creo que estás respondiendo cómo importar solo un documento. –
a partir de la respuesta @Millhouse pero con múltiples documentos en mi archivo solía
cat myFile.json | lwp-request -m POST -sS "http://localhost/dbname/_bulk_docs" -c "application/json"
POST
es un alias de lwp-request
pero POST
hace no parece funcionar en Debian. Si usa lwp-request
, necesita establecer el método con -m
como se indica arriba.
El _bulk_docs
posterior permite subir varios documentos a la vez.
la api bulk_doc debe tener todos los documentos anidados dentro de un objeto '{" docs ": [documents]}'. –
No es mi solución, pero me pareció que para resolver mi problema:
Una forma sencilla de exportar una base de datos CouchDB a un archivo, es mediante la ejecución del siguiente comando Curl en la ventana de terminal:
curl -X GET http://127.0.0.1:5984/[mydatabase]/_all_docs\?include_docs\=true > /Users/[username]/Desktop/db.json
siguiente paso es modificar el archivo JSON exportado a parecerse a algo como el siguiente (nota _ID):
{
"docs": [
{"_id": "0", "integer": 0, "string": "0"},
{"_id": "1", "integer": 1, "string": "1"},
{"_id": "2", "integer": 2, "string": "2"}
]
}
El bit principal que debe observar es agregar los documentos en el bloque de código "documentos". Una vez hecho esto se puede ejecutar el siguiente comando Curl para importar los datos a una base de datos CouchDB:
curl -d @db.json -H "Content-type: application/json" -X POST http://127.0.0.1:5984/[mydatabase]/_bulk_docs
Duplicación de una base de datos de Si desea duplicar una base de datos de un servidor a otro. Ejecute el siguiente 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/"}'
Post original: http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php
Probablemente un poco tarde para contestar. Pero si usted puede usar Python que se puede utilizar el módulo de couchdb para hacerlo:
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)
que creó el script en Python para hacer eso (Como no pude encontrar uno en Internet).
El guión completo está aquí::
http://bitbucket.org/tdatta/tools/src/
(nombre -> jsonDb_to_Couch.PY)
Si descarga el repositorio completo y:
texto reemplazar todos los "_id" en los archivos JSON para "id"
Ejecutar hacer load_dbs
Crearía 4 bases de datos en su instalación de sofá local
Espero que ayude a los novatos (como yo)
Creo que se supone que su código tiene los siguientes cambios: 'couch = couchdb.server (
Gracias Jared. Se corrigió en la publicación original. – Tanmay
Para todos los que buscan "POST": es parte del paquete libwww-perl. – ofrommel