Este blog se publicó originalmente en el blog personal de Roi Katz. Por favor, pulse aquí para encontrar el post original.
En el parte 1 hemos construido nuestra pequeña pero genial aplicación, incluso la hemos replicado en otro Couchbase Lite.
¿Y ahora qué? Queremos usarlo de verdad.
¿Cómo se utiliza una base de datos? Bueno, al menos para "obtener" los datos hay un par de opciones:
- Obtener por clave primaria
- Obtener por un índice (o "seleccionándolo" donde x)
Hasta ahora, en nuestra sencilla aplicación de ejemplo sólo podíamos utilizar la "clave primaria" para acceder a nuestros datos y recuperarlos.
Pero no es la única forma de obtener datos de Couchbase Lite.
En esta parte aprenderemos los fundamentos de la indexación de Couchbase Lite. AKA Vistas.
En las vistas, ejecutamos nuestras consultas.
Así que tenemos que hacerlo:
- Crear vista
- Ejecutar consultas en la vista
- Obtenga los resultados
Construiremos nuestro caso de uso - de cómo usar "vistas" en Couchbase Lite.
- Inicie un nuevo proyecto WPF.
- Añadir el paquete Nuget Couchbase.Lite
- Copie ese XAML
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<botón></botón> <botón></botón> <botón></botón> <botón></botón> |
Lo que se traduce en
![]() |
| GUI genera a partir del XAML anterior |
- Después de obtener la interfaz de usuario básica, que se puede explorar más tarde (no hay mucho aquí realmente), vamos a ir al código real.
Después de arrancar e inicializar la base de datos, vamos a definir nuestras vistas.
En este caso he definido 1 vista - sólo para mostrar cómo configurar las cosas.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
privado void GenerarVistas() { var docsByCity = Base de datos.GetView("docs_by_city"); docsByCity.SetMap((doc, emite) => { si (doc.ContieneClave("Ciudad")) { emite(doc["Ciudad"], doc); } }, "1"); } |
Lo que puedes ver aquí, que una vez que recupero un nombre de la _base de datos puedo definir un mapa sobre él, un mapa es básicamente una proyección y filtrado.
En el ejemplo anterior, he creado una vista llamada "docs_by_city", le he asignado un delegado, he comprobado si existe alguna clave ("City") y la he emitido al índice. Así de sencillo.
Acabamos de crear nuestro índice que para cada documento contiene una propiedad llamada Ciudad - emite todo el documento, puedes elegir emitir lo que quieras, depende de los requisitos de la aplicación.
Puede ajustarse para mejorar el rendimiento y reducir el tamaño del índice.
También puede poner como clave cualquier cadena que desee o componer su índice a partir de varias propiedades para satisfacer necesidades especiales.
Nunca es bueno almacenar todo el documento en el índice, ya que básicamente se hace una copia del documento dentro del índice. Intenta mantener tu índice lo más pequeño posible. Pero si usted necesita algún tipo de índice que tiene el documento completo como resultado, para el rendimiento es mejor mantener el documento en el índice en lugar de acceder a la propiedad result.Document - para mismo algunas idas y vueltas a la base de datos.
El número "1" aquí, es la versión del índice. Durante el desarrollo, si cambias la función de mapa, también necesitas incrementar ese número (en caso de que no hayas borrado toda la base de datos), para reconstruir el índice.
Hay 2 consultas especiales.
- Obtener el recuento de todos los documentos. (con _database.DocumentCount)
- Obtener todos los documentos. (con _database.CreateAllDocumentsQuery())
Después de definir nuestra vista (*index) podemos empezar a escribir el código y utilizarla.
- El uso, es bastante simple sólo 5 pasos.
- Obtener la vista
- Crear una consulta en la vista
- Defina sus criterios sobre el índice
- Ejecutarlo
- Léalo
En código parece aún más sencillo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
privado void GetByCityClick(objeto remitente, RoutedEventArgs e) { var docsByCity = Base de datos.GetView("docs_by_city"); var consulta = docsByCity.CrearQuery(); consulta.StartKey = Ciudad; consulta.EndKey = Ciudad; var queryResults = consulta.Ejecutar(); MessageBox.Mostrar(cadena.Formato("Se han recuperado {0} documentos para esa consulta", queryResults.Cuenta)); si (queryResults.Cuenta == 0) devolver; var documentos = queryResults.Seleccione(resultado => JsonConvert.SerializarObjeto(resultado.Valor, Formato.Indentado)).ToArray(); var commaSeperaterdDocs = "[" + cadena.Únete a(",", documentos) + "]"; DocumentoTexto = commaSeperaterdDocs; } |
Ejecuto la consulta y compruebo si hay algún resultado.
A continuación, "embellezco" el resultado (para cada valor) y lo devuelvo como una matriz JSON.
Por favor, preste atención aquí que no estoy usando result.Document sino result.Value, ya que usando result.Document no usará el índice e irá a consultar la base de datos para cada resultado.
Por lo tanto, por motivos de rendimiento, utilice result.key, result.value o result.DocumentId.
Ahora sólo tienes que añadir esa parte para generar algunos datos...
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
privado void InsertSomeDataClick(objeto remitente, RoutedEventArgs e) { var resultado = MessageBox.Mostrar("¡Pulsa Sí para insertar algunos datos (10 docs)!", "Confirmar", MessageBoxButton.SíNo); si (resultado == MessageBoxResult.Sí) { var cuente = Base de datos.Recuento de documentos; cadena[] ciudades = { "Londres", "Nueva York", "Tel Aviv" }; var rnd = nuevo Al azar(); para (int i = 0; i < 10; i++) { var id = "documento" + (i + cuente); var cityIndex = rnd.Siguiente(0, 3); var propiedades = nuevo Diccionario<cadena, cadena>(); propiedades.Añadir("nombre", "Roi Katz"); propiedades.Añadir("Ciudad", ciudades[cityIndex]); var doc = JsonConvert.SerializarObjeto(propiedades); InsertarDocumento(id, doc); } MessageBox.Mostrar("10 Registros insertados"); } } |
Y ya estamos listos.
Así se hace una vista sencilla
Por supuesto que tenemos más por venir sobre las vistas de Couchbase lite, es sólo el comienzo.
Por supuesto, tenemos que crear las propiedades adecuadas, por lo que para el proyecto completo, por favor revise mi GitHub página.



¿Qué es _database aquí? Estoy tratando de implementar las cosas anteriores en mi aplicación nodeJs con el servidor couchbase y una vez puse nombre del cubo en lugar de _database pero no pude conseguir nada bien.