2009-04-26 6 views

Répondre

2

Cet objet JSON ne sera pas accepté par CouchDB. Pour stocker toutes les données avec une requête serveur unique, utilisez:

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

Vous pouvez également soumettre une demande CouchDB différente pour chaque ligne.

Importer le fichier dans CouchDB de l'aide de la commande en ligne 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

Mon DB :: CouchDB :: module de schéma a un script pour aider à charger une série de documents en une base de données CouchDB. Le script couch_schema_tool.pl accepte un fichier en tant qu'argument et charge tous les documents de ce fichier dans la base de données. Il suffit de mettre chaque document dans un tableau comme ceci:

[ { "name": "bob", "salut": "bonjour"}, { "name": "bonjour", "salut": "Au revoir "} ]

Il va les charger dans la base de données pour vous. Petite mise en garde cependant je n'ai pas testé mon dernier code contre CouchDB plus tard donc si vous l'utilisez et il casse alors faites le moi savoir. Je dois probablement changer quelque chose pour s'adapter aux nouvelles modifications de l'API.

Jeremy

5

Si vous êtes sous Linux, vous pouvez écrire un script shell rapide à POST le contenu des fichiers JSON valides pour Couch.

Pour tester canapé, je l'ai fait quelque chose comme ceci:

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

myFile.json a le contenu JSON que je voulais importer dans la base de données.

Une autre alternative, si vous ne voulez pas la ligne de commande ou n'utilisez Linux, et préférez une interface utilisateur graphique, vous pouvez utiliser un outil comme RESTClient

+0

Pour tous ceux qui recherchent "POST": cela fait partie du paquet libwww-perl. – ofrommel

3

Oui, ce n'est pas valide JSON ...

Pour importer JSON-objets que je CURL (http://curl.haxx.se):

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

où my.json est un fichier JSON-objet est. Bien sûr, vous pouvez mettre votre JSON-objet directement dans CouchDB (sans fichier) ainsi:

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

Si vous ne disposez pas d'un doc_id, vous pouvez demander CouchDB pour elle:

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

Pour toute autre personne obtenant une erreur à propos de Content-Type sur le premier exemple, essayez ceci: 'curl -X POST -d @ data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Content-Type : application/json'' –

+0

Downvoted parce que je pense que la question pose des questions sur plusieurs docs et pas seulement un. Je crois que vous répondez comment importer un seul document. –

6

A partir de réponse @Millhouse mais avec plusieurs documents dans mon dossier je

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

POST est un alias de lwp-request mais POST-t ne semble pas fonctionner sur Debian. Si vous utilisez lwp-request, vous devez définir la méthode avec -m comme ci-dessus.

La fin _bulk_docs permet de télécharger plusieurs documents à la fois.

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

+0

l'API bulk_doc doit avoir tous les documents imbriqués dans un objet '{" docs ": [documents]}'. –

2

Ce n'est pas ma solution, mais je trouve cela pour résoudre mon problème:

Une façon simple d'exporter une base de données CouchDB à un fichier, est en exécutant la commande Curl suivante dans la fenêtre du terminal:

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

étape suivante consiste à modifier le fichier JSON exporté pour ressembler à quelque chose comme ci-dessous (notez le _id):

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

Le bit principal que vous devez regarder est d'ajouter les documents dans le bloc de code "docs". Une fois cela fait, vous pouvez exécuter la commande Curl suivante pour importer les données à une base de données CouchDB:

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

Dupliquer une base de données Si vous souhaitez dupliquer une base de données d'un serveur à un autre. Exécutez la commande suivante:

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

Probablement un peu tard pour répondre. Mais si vous pouvez utiliser Python que vous pouvez utiliser le module CouchDB de le faire:

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) 

J'ai créé le script python pour le faire (Comme je ne pouvais pas trouver un sur Internet).

Le script complet est ici::

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

(nom -> jsonDb_to_Couch.py)

Si vous téléchargez la pleine mise en pension et:

  1. Texte remplacer tous les "_id" dans les fichiers JSON "id"

  2. Lancer make load_dbs

Il créerait 4 bases de données dans votre installation locale de canapé

Espérons que les débutants (comme moi)

+1

Je crois que votre code est censé avoir les changements suivants: 'couch = couchdb.server ()' parenthèse fermante au lieu de parenthèse 'db_entry = json.loads (row)' charge au lieu de charger –

+0

Merci Jared. Correction dans le message original. – Tanmay