martes, 3 de septiembre de 2013

Vistas en CouchDB


Para utilizar los datos de nuestra base CouchDB se utilizan vistas (views), que se escriben en JavaScript, las hay de dos tipos:
  • Las "vistas temporales" (temporary views) usadas mayormente en desarrollo ya que son muy lentas.
  • Las "vitas permanentes" que son documentos "especiales" de la base que se almacenan con el prefijo "_design"

Funciones de mapeo (Map Functions)

Cómo crear la vista en JavaScript... para explicar un ejemplo. Supongamos que tenemos documentos correspondientes a

{
   "_id": "320c8f17caa2698efdc307d7e6000b73",
   "type": "persona",
   "nombre": "Juan",
   "apellido": "Perez",
   "documento": 45678913
}

A los documentos les ponemos un type (o tipo) para identificarlos nosotros, bueno, si queremos una vista para ver las "personas" tenemos:

{
   "_id": "_design/personas",
   "_rev": "1-4530f2212bd4df41abeb18285a1ec450",
   "language": "javascript",
   "views": {
       "personas": {
           "map": "function(doc) {\n  if (doc.type == 'persona'){\n    emit(doc.documento, doc);\n  }\n}"
       }
   }
}

Analizando lo último, vemos que cree un documento con el id especial "_design/personas" (que lo identifica como documento de diseño), y que tiene una vista también llamada "personas" que tiene a su vez una función de mapeo.
Las funciones de mapeo se ejecutan para crear los índices de la base*1, se corren para todos los elementos de la misma. La función recibe doc, que es el documento de que se trate (se ejecuta una vez por cada documento), por eso lo primero que hacemos es ver si se trata de un documento de "persona", si es así corresponde emitir un resultado para le índice, que debe ser un par clave/valor, en este caso ponemos dni (doc.dni será la clave) y el documento mismo.*2



*1 La primera vez que usa una vista puede tardar en responder (dependiendo de la cantidad de datos que involucre) ya que es el momento en que se crea el índice mapeado (no cuando se graba la vista, sino la primera vez que se la invoca).
*2 Siempre debemos llamar a la función emit para envíe el par clave/valor para el índice.

Fuente: http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

No hay comentarios:

Publicar un comentario