El lenguaje por defecto que podemos utilizar en este tipo de documentos es el JavaScript por lo que se hace ideal para aplicaciones completas si nos apoyamos de tecnologías como Node.js y frameworks para el Front-End como AngulaJS, Backbone.js y similares.
Requisitos
1- Para poder ejecutar este tutorial necesitamos en primer lugar una instalación de CouchDB, para los primeros pasos con la misma se puede dar un vistazo al siguiente tutorial. Esta instalación debe tener permisos para poder ejecutarse en nuestra sesión de usuario, si la instalación tiene un usuario debemos conocer la contraseña para poder crear documentos.
2- También vamos a necesitar la herramienta cURL para enviar peticiones vía HTTP y así poder hacer uso de la API de CouchDB.
3- Por último necesitamos un editor de textos para poder construir los archivos JSON que utilizaremos, por supuesto con los respectivos permisos para guardar en disco.
En el caso de este tutorial estaremos utilizando Windows 7 por lo que habrá posiblemente algunos comandos que necesitarán su equivalente en otro sistema operativo.
Modelar Documentos
Al momento de trabajar con CouchDB necesitamos construir documentos que tengan un sentido para un usuario final, es decir, algo que se pueda mostrar y tenga un sentido sin necesidad de tener que hacer mucho.
Hay otro tipo de documentos llamado event log, que podemos utilizar en ocasiones en las cuales necesitemos el ingreso de datos de un usuario y por esto mismo necesitamos validaciones adicionales, aunque también se puede utilizar también cuando necesitamos detonar alguna tarea de forma asincrónica.
Nuestro primer documento de diseño
En un documento de diseño podemos definir las llamadas vistas y shows, cada una contiene una forma especial de mostrar datos, estas las explicaremos más adelante, de momento vamos a concentrarnos en construir nuestro primer documento.
Necesitamos crear una Base de Datos en nuestro servidor CouchDB y dentro de la misma debemos añadir uno o más documentos, en nuestro caso de ejemplo hemos creado uno llamado recetas y contiene un campo título y otro campo llamado ingredientes.
Esta Base de Datos luce de la siguiente forma:
Una vez que ya tenemos data cargada en nuestra Base de Datos, debemos construir el documento, para ello crearemos un archivo llamado en nuestro caso recetas-couch.js y le colocamos el siguiente código:
{ "language": "javascript", "views": { "all": { "map": "function(doc) { emit(doc.titulo, doc) }" }, "by_titulo": { "map": "function(doc) { if (doc.titulo != null) emit(doc.titulo, doc) }" }, "by_ingredientes": { "map": "function(doc) { if (doc.ingredientes != null) emit(doc.ingredientes, doc) }" } }, "shows": { "recetas": "function(doc, req) { return '<h1>' + doc.titulo + '</h1>' }" }}Este no es más que un simple JSON donde en primer lugar definimos el lenguaje como JavaScript, luego creamos un elemento llamado views donde creamos 3 vistas, una general, una por título, y una por ingredientes. Finalmente creamos un shows, donde mostramos el título de nuestra receta.
Ahora utilizando cURL debemos pasar este archivo a nuestro servidor CouchDB, como este tipo de documentos es “especial”, no podemos dejar que el servidor sea quien asigne un nombre de forma aleatoria, es por ello que en vez de utilizar el método POST debemos utilizar el método PUT, que es para crear nuevos elementos.
Luego, todos nuestros documentos de diseño deben ir dentro de la ruta _design de nuestra Base de Datos, y luego de esta colocar el nombre correspondiente. Veamos cómo podemos hacer que el documento que hemos guardado pase a nuestro servidor.
En primer lugar vamos a ejecutar lo siguiente en consola:
curl.exe -X PUT -d @nombreArchivo 'http://127.0.0.1:5894/basedatos/_design/nombreEsta es la forma base de como incorporar el documento en nuestra Base de Datos, por supuesto la ejecución de cURL cambiará dependiendo de nuestro sistema operativo, y la conexión con el servidor dependerá de si tenemos habilitado la autenticación de usuarios.
Aquí es importante resaltar que el nombre de nuestro archivo debe ir precedido por un símbolo @ ya que si no lo hacemos cURL estará esperando el contenido del archivo directamente, y por razones obvias de usabilidad no resulta adecuado escribir directamente el JSON en la consola.
En el caso de nuestro entorno de pruebas lo anterior quedaría como lo siguiente:
curl.exe -X PUT -d recetas-couch.js http://root:123456@127.0.0.1:5984/recetas/_design/recetasDonde al ejecutarlo obtendríamos lo siguiente en nuestra consola:
Cómo vemos ya hemos creado nuestro primero documento diseño en CouchDB. Si ingresamos a Futon podremos ver como nuestro documento de diseño ya existe y hasta nos da los detalles de las diferentes vistas y shows que tenemos:
Ahora si queremos ver de alguna forma la utilidad para todo esto que estamos construyendo, solo tenemos que ingresar desde el navegador y con la siguiente estructura podemos hacer la consulta a nuestro show que nos arrojará un resultado:
http://localhost:5984/NombreBaseDatos/_design/NombreDocumentoDiseño/_show/NombreShow/idDocumentoVeamos que resulta de la consulta a la que hemos insertado en nuestro entorno de pruebas:
Como vemos es algo bastante sencillo, si nos fijamos en la definición del shows en nuestro archivo JSON notaremos que lo que hemos hecho es imprimir el titulo tras unas etiquetas <h1> por lo que la respuesta es interpretada en nuestro navegador como un documento HTML.
Lo mismo podemos hacer con las views o vistas, solo que esta vez en lugar de definir el ID del documento en específico vamos a utilizar los nombres de las vistas, veamos:
Notamos que en este caso simplemente hemos indicado el nombre de nuestra vista by_ingredientes, con ello obtenemos un resultante en JSON, pero esto también tiene otra función y es que podemos hacer búsquedas, ya que hemos construidos los índices dando así un poco más de rendimiento a nuestro motor de Base de Datos. Ya que CouchDB únicamente va a recorrer todos los documentos la primera vez, ya las llamadas o consultas posteriores no van a requerir este procesamiento.
La forma en la que podemos hacer consultas es a través de las llamadas llaves o keys, y esto podemos hacerlo directamente dentro de la consulta por URL a nuestra vista, así podemos establecer rangos, palabras exactas, valores únicos, etc.
Algunos operadores que podemos utilizar son:
Veamos a continuación como podemos hacer un pequeño ejemplo con esto, vamos a ubicar la receta que contenga Ajo como ingrediente, en nuestro caso deberíamos obtener la receta “Salsa Pesto”.
Hemos filtrado a un solo documento, de los dos que teníamos inicialmente cargados en nuestra Base de Datos, esto nos da solo una pequeña aproximación de lo poderosa que es esta herramienta.
Si añadimos una endkey, podemos hacer un filtrado más amplio al añadir un rango, esto se los dejamos de tarea de forma que puedan investigar y cometer errores, fomentando así la perdurabilidad en la memoria de todo lo aprendido.
Con esto hemos finalizado este tutorial, como vemos la herramienta de documentos de diseño es muy poderosa, porque no solo nos permite crear vistas y shows, es que estos pueden tener un procesamiento JavaScript mucho más avanzado del que cubrimos acá incorporando operaciones con valores, condicionales, operaciones en el DOM, etc., todo lo que podamos lograr con el lenguaje podemos incorporarlo efectivamente dentro de CouchDB, con ello la construcción de aplicaciones utilizando únicamente JavaScript es muy posible.
Tengo un inconveniente con su tutorial... me podrian ayudar
Una vez que ya tenemos data cargada en nuestra Base de Datos, debemos construir el documento, para ello crearemos un archivo llamado en nuestro caso recetas-couch.js y le colocamos el siguiente código:
de que manera puedo crear ese archivo y cargarlo en la base se datos