Couchbase Móvil

Presentación de la interfaz de consulta en Couchbase Mobile 2.0

La versión 2.0 de Couchbase Lite, trae una plétora de nuevas funciones y mejoras. Ya hablamos de una de estas mejoras, a saber, el nuevo protocolo de replicación entre en un anterior entrada en el blog sobre Replicación 2.0. En esta entrada de blog, le presentaremos otra característica importante: la interfaz de consulta de Couchbase Lite. La nueva interfaz de consulta se basa en N1QLel lenguaje de consulta declarativo de Couchbase que extiende SQL para JSON. Si estás familiarizado con SQL, te sentirás como en casa con la semántica de la nueva API.

Esta entrada presenta la interfaz de consulta y cubre los aspectos básicos. Consulte la última sección de esta entrada para obtener información específica sobre otras entradas de blog relacionadas con funciones de consulta más avanzadas.

Puede descargar las versiones preliminares de Couchbase Mobile 2.0 desde nuestra página web descargas página.

Fondo

Si utilizabas las versiones 1.x de Couchbase Mobile, probablemente estés familiarizado Map-Views para crear índices y consultas. En la versión 2.0, ya no es necesario crear vistas y funciones de mapa. En su lugar, una sencilla interfaz le permite crear índices y puede utilizar una interfaz Query Builder para construir sus consultas. En comparación, la nueva interfaz de consulta es más sencilla de utilizar y mucho más potente. Descubriremos algunas de sus características en este post.

Ejemplo de proyecto

Aunque los ejemplos que aquí se exponen utilizan Swift para iOS, ten en cuenta que, salvo algunas pequeñas diferencias, la misma interfaz de consulta es compatible también con las plataformas Android y Windows. Por lo tanto, con algunos ajustes menores, deberías poder reutilizar los ejemplos de este artículo cuando trabajes con otras plataformas.

Siga las instrucciones siguientes si está interesado en un proyecto Swift de muestra

  • Clonar el iOS Swift Playground desde GitHub
  • Siga las instrucciones de instalación en el LÉAME para construir y ejecutar la zona de juegos.

Modelo de datos de muestra

Utilizaremos la base de datos de muestras de viajes aquí

El conjunto de datos de la muestra incluye varios tipos de documentos identificados por el tipo del documento. Nos centraremos en documentos de tipo "hotel" y "hito". A continuación se muestra el modelo de documento JSON. Para simplificar, hemos omitido algunas de las propiedades del modelo a continuación.

Conceptos básicos

Abrir / Crear una base de datos

Para todas las consultas que se realizan a continuación, utilizaremos la función Base de datos API para abrir/crear Base de Datos CouchbaseLite.

Índices

Para acelerar las consultas de lectura, puede crear índices sobre las propiedades que va a consultar. La mejora del rendimiento sería significativa en grandes conjuntos de datos. Por supuesto, tenga en cuenta que habrá un aumento en las necesidades de almacenamiento para almacenar los índices y el rendimiento de las escrituras también puede verse afectado. Por lo tanto, tenga cuidado al crear demasiados índices.

El siguiente ejemplo crea un ÍndiceValor en el tipo de un documento

El siguiente ejemplo crea un ÍndiceValor en tipo y nombre propiedades de un Documento

Obtención de documentos de la base de datos

Una consulta en Couchbase Lite se construye usando la API del constructor de consultas.

La siguiente consulta obtiene todos los documentos de la base de datos especificada. Para cada documento que coincida con la consulta, se obtienen todas las propiedades asociadas al documento.

Obtención de documentos de la base de datos con paginación

Esta es la estructura de una consulta simple que obtiene límite número de documentos de la base de datos a partir del offset. Para cada documento que coincide con la consulta, se obtienen todas las propiedades asociadas al documento.

Valores de retorno con SelectResult

A SeleccionarResultado representa un único valor de retorno de la consulta. Los documentos en Couchbase Lite comprenden las propiedades del documento especificadas como un diccionario de pares clave-valor y metadatos asociados. Los metadatos consisten en el Id del documento y el Id de la secuencia asociada con el Documento. Cuando se consulta un documento, los metadatos del documento no se devuelven por defecto. Deberá solicitar explícitamente los metadatos.

  • SelectResult.all()
    • Devuelve todas las propiedades asociadas a un Documento
  • SeleccionarResultado(Expresión)
    • Devuelve las propiedades de un Documento en función del Expresión. Más adelante hablaremos de los distintos tipos de expresiones.
  • SelectResult.expression(Expresión.Meta.id)
    • Devuelve el Id del documento
  • SelectResult.expression(Expression.Meta.sequence)
    • Devuelve el Id de secuencia (utilizado en las réplicas)

Puede especificar una lista separada por comas de SeleccionarResultado expresiones en el seleccione de su consulta.
Por ejemplo, la siguiente sentencia select busca el Id del documento así como el tipo y nombre propiedades del documento

Expresión de consulta

Una expresión de consulta se utiliza para construir una sentencia de consulta

Couchbase Lite incluye soporte para Expresión Tipos.

  • Propiedad
  • Agregado
  • Cadena
  • Intercalación
  • Regex
  • FTS
  • Operador de comprobación nula
  • Expresiones aritméticas
  • Metadatos
  • Coincidencia de patrones
  • Comparación
  • Colección
  • Función
  • Parámetro
  • Cuantificado
  • Operador Bitwise

Tratamiento de las respuestas a las consultas

El resultado de la ejecución de la consulta es un array en el que cada miembro del array es un Diccionario / Mapa correspondiente a un documento que satisface la consulta.

  • Si consulta todas las propiedades del documento mediante SelectResult.all()cada miembro de la matriz de respuesta es un par clave-valor, en el que el nombre de la base de datos es la clave y el diccionario correspondiente al documento es el valor de la clave.

  • Los resultados serían algo parecido a esto (donde "muestra-viaje" es el nombre de la base de datos )

    El siguiente fragmento de código es un ejemplo (en Swift) de cómo procesar los resultados anteriores para obtener los detalles del objeto documento

     

  • Si consulta el Id del documento mediante SelectResult.expression(Expresión.Meta.id)entonces cada miembro de la matriz de respuesta es un par clave-valor, con "id" como clave y el Id del documento como valor.
    Por ejemplo, considere la consulta

  • Los resultados serían algo así -

    El siguiente fragmento de código es un ejemplo (en Swift) de cómo procesar los resultados anteriores para obtener los detalles del objeto documento utilizando el Id del documento
  • Si está consultando una propiedad o propiedades específicas del documento utilizando, por ejemplo, SelectResult.expression(Expression.property("tipo")cada miembro de la matriz de respuesta es un par clave-valor, con el nombre de la propiedad o propiedades como clave(s) y los valores de propiedad correspondientes como valorPor ejemplo, considere la consulta

  • Los resultados serían algo así -

    El siguiente fragmento de código es un ejemplo (en Swift) de cómo procesar los resultados anteriores para obtener los valores de las propiedades que ha consultado

    Puede consultar los metadatos y las propiedades del documento al mismo tiempo utilizando una lista separada por comas de los siguientes elementos SeleccionarResultado cada miembro de la matriz de respuesta es un par clave-valor, tal como se ha explicado anteriormente.

    Los resultados serían algo así -

    El siguiente fragmento de código es un ejemplo (en Swift) de cómo procesar los resultados anteriores para obtener los valores de las propiedades que ha consultado

     

Introducción de la cláusula Where

De forma similar a SQL, puede utilizar la función donde para filtrar los documentos que se devolverán como parte de la consulta. En seleccione recibe un Expresión. Puede encadenar cualquier número de Expresiones para implementar sofisticadas capacidades de filtrado.

Filtrado de documentos en función de una propiedad específica

En el ejemplo siguiente, utilizamos Expresión de propiedad junto con Expresiones de comparación para filtrar documentos en función de una propiedad específica del documento. En el siguiente ejemplo se muestra la función equalTo expresión de comparación.

Nota: Cuando se hace referencia a una propiedad en un archivo Expresión de propiedadpodemos utilizar rutas clave (en notación de puntos) para especificar la ruta a una propiedad anidada.

La lista de operadores de comparación admitidos incluye
* lessThan
* notLessThan
* lessThanOrEqualTo
* notLessThanOrEqualTo
* mayorQue
* notGreaterThan
* Mayor que o igual a
* notGreaterThanOrEqualTo
* equalTo
* notEqualTo

Filtrado de documentos mediante expresiones lógicas

Podemos utilizar Expresión lógica encadenar varios expresiones de comparación. En el ejemplo siguiente, obtenemos documentos de tipo hotel cuyo país es igual a "Estados Unidos" o "Francia y cuyo vacante propiedad es verdadero. En otras palabras, buscamos todos los hoteles de Estados Unidos o Francia que tienen una plaza libre.

Coincidencia de patrones

En como y regex pueden utilizarse para la concordancia de cadenas. Éstas realizan **comparaciones que distinguen mayúsculas y minúsculas**. Por lo tanto, si desea que la coincidencia de cadenas no distinga entre mayúsculas y minúsculas, deberá utilizar Función.inferior o Función.superior para transformar la cadena coincidente a sus equivalentes en minúsculas o mayúsculas.

Coincidencia exacta

En el ejemplo siguiente, buscamos documentos de tipo "hito" donde el nombre coincide exactamente con la cadena "Museo de los Ingenieros Reales". Tenga en cuenta que como distingue entre mayúsculas y minúsculas, utilizamos Función.inferior para transformar la cadena coincidente en su equivalente en minúsculas. Así, la siguiente consulta devolverá "hito" tipo documentos con nombre a juego "Museo de los Ingenieros Reales", "museo real de ingenieros", "MUSEO REAL DE INGENIEROS" etc.

Partido Wildcard

Podemos utilizar % signo dentro de un como para hacer una coincidencia comodín con cero o más caracteres. El uso de comodines le permite tener cierta imprecisión en su cadena de búsqueda.

En el ejemplo siguiente, buscamos documentos de tipo "hito" donde el nombre coincide con cualquier cadena que empiece por "eng" seguida de cero o más caracteres, la letra "e", seguida de cero o más caracteres. Una vez más, estamos utilizando Función.inferior para que el caso de búsqueda sea insensible.

La siguiente consulta devolverá "hito" tipo documentos con nombre a juego "Ingenieros", "motor", "huevo inglés" , "Águila de Inglaterra" etc. Observe que las coincidencias pueden abarcar límites de palabras.

Coincidencia de caracteres comodín

Podemos utilizar "_" signo dentro de un como para realizar una coincidencia comodín con un único carácter.

En el ejemplo siguiente, buscamos documentos de tipo "hito" donde el nombre coincide con cualquier cadena que empiece por "eng" seguida de exactamente 4 caracteres comodín y termine en la letra "r".

Observe que, a diferencia de los ejemplos anteriores, no estamos utilizando Función.inferior para transformar la cadena de búsqueda a minúsculas. Así, la búsqueda distinguirá entre mayúsculas y minúsculas.
La siguiente consulta devolverá "hito" tipo documentos con nombre a juego "Ingeniero", "Ingeniero1" etc.

Coincidencia Regex

En regex puede utilizarse para coincidencias que distingan entre mayúsculas y minúsculas. Similar al comodín como expresiones, regex La concordancia de patrones basada en expresiones le permite tener cierta imprecisión en su cadena de búsqueda.

En el ejemplo siguiente, buscamos documentos de tipo "hito" donde el nombre coincide con cualquier cadena (en los límites de las palabras) que empiece por "eng" seguida de exactamente 4 caracteres comodín y acabe en la letra "r". Una vez más, estamos utilizando Función.inferior para que el caso de búsqueda sea insensible.

La siguiente consulta devolverá "hito" tipo documentos con nombre a juego "Motor", "motor" etc. Tenga en cuenta que el \b especifica que la coincidencia debe producirse en los límites de palabra.

Documentos con propiedad nula o ausente

Una de las características del lenguaje de consulta que lo diferencia de SQL es la posibilidad de consultar documentos con propiedades nulas o ausentes.

En isNullOrMissing() se utiliza junto con la expresión Expresión de propiedad para comprobar si la propiedad especificada tiene un valor nulo o ausente. La dirección isNullOrMissing() hace lo contrario.

En el ejemplo siguiente, buscamos todos los documentos en los que el campo correo electrónico nula o ausente.

Ordenación de documentos

Es posible ordenar los resultados de una consulta en función del resultado de una expresión determinada.

El siguiente ejemplo devuelve documentos de tipo igual a "hotel" ordenados en orden ascendente por el valor de la variable título propiedad.

Manipulación de cadenas

Las capacidades de manipulación de cadenas son integrales para cualquier procesamiento de datos. En ejemplos anteriores, vimos cómo el Función.inferior se puede utilizar para transformar una cadena a minúsculas equivalentes para realizar comparaciones de cadenas sin distinción entre mayúsculas y minúsculas.

Couchbase Lite soporta las siguientes funciones de procesamiento de cadenas.

El ejemplo siguiente devuelve los documentos de correo electrónico contiene la subcadena "natgeo.org". En nombre se convierte a mayúsculas en la respuesta.

 

Intercalación

Las funciones de intercalación mejoran las capacidades de comparación y ordenación de cadenas, ya que admiten cadenas unicode, manipulación de cadenas en función de la configuración regional y funciones específicas de cada idioma, como los diacríticos. Puede obtener más información sobre la intercalación en redacción por Jens Alfke.

El ejemplo siguiente define las reglas de intercalación para que se ignoren las mayúsculas y los acentos. Este intercalador se aplica a la función de comparación de cadenas en el campo nombre propiedad. Los resultados incluirán documentos en los que nombre es igual a cadenas como "Hotel Novotel Paris La Defense" , "Hotel Novotel Paris La Défense", etc.

Existen algunas limitaciones en el soporte de la Cotejo - en el momento de escribir este post, no se puede utilizar con consultas de concordancia de patrones tales como como y regex .

Parametrización

Una de las características más potentes de la interfaz de consulta es la posibilidad de establecer parámetros en una consulta. Esto le da la flexibilidad de actualizar los valores de los parámetros de una consulta en cualquier momento sin tener que volver a crear o reiniciar la consulta. Al cambiar los parámetros de la consulta, ésta se reiniciará automáticamente y los nuevos parámetros surtirán efecto.

Refiriéndonos al modelo de datos anterior, supongamos que desea obtener documentos en los que el número público-gustos está dentro de un rango determinado. En el ejemplo siguiente, buscamos "hotel". tipo documentos en los que el número de público-gustos está entre 5 y 10.

Tenga en cuenta que el ejemplo anterior, usted puede haber notado el uso de ArrayFunction. Couchbase Lite 2.0 nos proporciona un amplio soporte para la manipulación de arrays. Esto será discutido más adelante en este entrada del blog sobre colecciones.

¿Qué sigue?

Esta entrada de blog te dio un vistazo a la nueva y poderosa Interfaz de Consulta soportada en Couchbase Lite 2.0. Puedes descargar las versiones preliminares de Couchbase Mobile 2.0 desde nuestro descargas página.

Aquí hay otros posts relacionados con Couchbase Mobile Query que pueden ser de interés
- Este entrada del blog analiza las funciones de búsqueda de texto completo.
- Este entrada del blog explica cómo consultar colecciones de matrices
- Este entrada del blog explica cómo realizar consultas JOIN

Si tiene alguna pregunta o sugerencia, deje un comentario a continuación o póngase en contacto conmigo en Twitter @rajagp o envíeme un correo electrónico priya.rajagopal@couchbase.com. En Foros de Couchbase son otro buen lugar para plantear preguntas.

 

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Priya Rajagopal, Directora de Gestión de Productos

Priya Rajagopal es directora sénior de gestión de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el perímetro. Lleva más de 20 años dedicándose profesionalmente al desarrollo de software en varios puestos de liderazgo técnico y de producto, con más de 10 años centrados en tecnologías móviles. Como delegada de estándares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de estándares IPTV. Tiene 22 patentes en las áreas de redes y seguridad de plataformas.

8 Comentarios

  1. Hola,

    Después de actualizar Nuget Couchbase.Lite 2.1.2 parece que algunas de las funcionalidades de 1.3.1 han desaparecido como View:
    var query = Provider.Db.GetView(viewName).CreateQuery();
    query.AllDocsMode = AllDocsMode.AllDocs;

    ¿Cómo puedo encontrar en Couchbase.Lite 2.1.2 para obtener VIEW?

    1. La interfaz QueryBuilder soporta una funcionalidad equivalente a la de Views, excepto que proporciona una forma más intuitiva de hacerlo. Su formato similar a SQL hace que sea más fácil de usar.
      Si tiene preguntas específicas sobre lo que desea hacer y cómo hacerlo, envíe un ejemplo concreto a nuestros foros de desarrollo en http://www.couchbase.com/forums/. Antes de eso, le recomiendo que revise nuestros documentos en https://docs.couchbase.com/couchbase-lite/2.1/csharp.html. Hay varios ejemplos de como hacerlo en csharp.

  2. Thanigaivelan Udayakumar diciembre 20, 2018 a 5:08 am

    ¿Podría indicarme también cómo puedo actualizar el documento?
    Tengo documentos de esta capacidad en móviles y ha estado funcionando mal en mi implementación actual(javascriptcore)

    tamaño del documento: 600kb
    líneas: 27000
    caracteres totales:614386

    1. Thanigaivelan Udayakumar diciembre 20, 2018 a 5:11 am

      Tenga la amabilidad de compartir una dirección para mi caso. Puedo seguir para cualquier detalle en los foros

  3. Hay un pequeño error cuando mencionas En el ejemplo,
    buscamos todos los documentos en los que la propiedad email sea nula o falte.

    Para ello has utilizado el método notNullOrMissing() incorrecto en lugar de isNullOrMissing().

    Por favor, actualice el documento.

  4. Hola,

    después de actualizar a 2.6.3, el siguiente código no funciona

    Function.contains(Function.lower(Expression.property("email")), substring: Expression.string("Sri@xxx.com"))
    .or(Function.contains(Function.lower(Expression.property("asunto"))), substring: Expression.string("Sri@xxx.com")))

    1. Lo siento, ha sido un error mío. Ignóralo.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.