Tutorial CouchDB: creando bases de datos

Siguiendo con los post sobre CouchDB (CouchDB – base de datos documental, Comenzando con CouchDB, CouchDB (I) – Instalación) ahora hablare sobre como usar couchdb.

En este primer post veremos como crear una base de datos, como acceder a ella, ingresarle datos y otras cosas mas. Es indispensable que tengan algún conocimiento de cUrl, REST y JSON ya que se utiliza estas herramientas para comunicarse con la base de datos couchdb

Crear una base de datos

Para crear una base de datos utilizamos el método PUT


curl -X PUT http://127.0.0.1:5984/users

//si esta todo ok devuelve
{"ok":true}

//si hubo error
{"error":"file_exists","reason":"The database could not be created, the file already exists."}

Si no leyeron los post anteriores, recuerden que CouchDB al ser una base de datos documental no posee una estructura de datos fija y estática como si las tienen las bases de datos relacionales, por lo cual los documentos que se creen dentro de la base de datos “usuarios” podrian tener distinto formato como veremos a continuación

Borrar una base de datos

<pre>curl -X DELETE http://127.0.0.1:5984/perms

<pre>//si esta todo ok devuelve
{"ok":true}

//si hubo error
{"error":"not_found","reason":"missing"}</pre>
</pre>

Agregar documentos a una base de datos


curl -X PUT http://127.0.0.1:5984/users/mostofreddy -d '{"firstName":"Federico","lastName":"Lozada Mosto","nick":"mostofreddy"}'

curl -X PUT http://127.0.0.1:5984/users/homero -d  '{"firstName":"Homero","lastName":"Simpson","age":"36","city":"Sprinfield"}'

Como ven, son dos documentos que corresponden a la misma base pero tienen estructura distinta.

Devolver todas las bases de datos


curl -X GET http://127.0.0.1:5984/_all_dbs

Obtener los datos básicos


curl -X GET http://127.0.0.1:5984/users

//nos devuelve en formato JSON

{
"db_name":"user",
"doc_count":0,
"doc_del_count":0,
"update_seq":0,
"purge_seq":0,
"compact_running":false,
"disk_size":79,
"instance_start_time":"1273033142185846",
"disk_format_version":5
}

Copiar de un documento a otro


curl -X COPY http://127.0.0.1:5984/users/mostofreddy -H "Destination: flozadamosto"

Obtener todos los documentos de una base de datos


curl -X GET http://127.0.0.1:5984/users/_all_docs

//nos devuelve en formato JSON

{
    "total_rows":2,
    "offset":0,
    "rows":[
        {"id":"mostofreddy","key":"mostofreddy","value":{"rev":"1-967a00dff5e02add41819138abb3284d"}},
        {"id":"homero","key":"homero","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"}}
        ]
}

Obtener todos lso documentos  pero en ordenados por id de documento en forma descendente


curl -X GET http://127.0.0.1:5984/users/_all_docs?descending=true

Obtener todos lso documentos  limitando la cantidad devuelta


curl -X GET http://127.0.0.1:5984/users/_all_docs?descending=true&limit=1

Obtener todos los documentos pero recuperando tambien toda la información de los documentos


curl -X GET http://127.0.0.1:5984/contacts/_all_docs?include_docs=true

{
    "total_rows":4,
    "offset":0,
    "rows":[
        {"id":"mostofreddy","key":"mostofreddy","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"},"doc":{"_id":"mostofreddy","_rev":"1-32273fce7b3c666c9a28ee3d5731d963","firstName":"Federico","lastName":"Lozada Mosto","nick":"mostofreddy"}},
        {"id":"homero","key":"homero","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"},"doc":{"_id":"homero","_rev":"1-32273fce7b3c666c9a28ee3d5731d963","firstName":"Homero","lastName":"Simpsons","age":"36","city":"Sprinfield"}}
        ]
}