Consulta SQL++ / N1QL

Cómo consultar colecciones de matrices en Couchbase Lite

Una de las principales características introducidas en Couchbase Lite 2.0es la nueva interfaz de consulta basada 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. Cubrimos los fundamentos de la interfaz en un anterior entrada del blog. Las matrices son un componente integral del modelado de datos con JSON. En esta entrada del blog, hablaremos de la consulta de colecciones de matrices mediante la nueva API.

En este blog se da por sentado que usted conoce los fundamentos, así que si aún no lo ha hecho, asegúrese de revisar la página entrada anterior primero. La última sección de la entrada contiene enlaces a otros blogs de consulta relevantes.

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

Fondo

Si estabas usando versiones 1.x de Couchbase Mobile, probablemente estés familiarizado con 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 comentan utilizan Swift para iOS, ten en cuenta que, salvo algunas pequeñas diferencias, la misma interfaz de consulta también es compatible con las plataformas Android y Windows. Por lo tanto, con algunos ajustes menores, deberías poder reutilizar los ejemplos de consulta 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" . A continuación se muestra el modelo de documento JSON. Por brevedad, hemos omitido algunas de las propiedades del modelo a continuación.

En concreto, obsérvese que el modelo incluye colecciones anidadas - me gusta_público y reseñas. Las consultas de las secciones siguientes tratarán de estas colecciones anidadas.

** Consulte el modelo anterior para cada uno de los ejemplos de consulta a continuación. **

El asa de la base de datos

En las consultas siguientes, 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

Contención de matrices

La siguiente consulta recupera los ids, nombres y me gusta_público propiedades de los documentos en los que me gusta_público en "hotel" tipo contiene el valor de "Corrine Hilll". Para ello, el **ArrayFunction.contains** se utiliza en la función me gusta_público matriz.

Tamaño de la matriz

La siguiente consulta recupera los ids, nombres y las propiedades talla de me gusta_público en "hotel" tipo documentos. Para ello, el **ArrayFunction.length** se utiliza en la función me gusta_público para obtener el tamaño de la matriz.

Además, observe que estamos utilizando como expresión a alias el valor del recuento del array a NumLikes. Habíamos introducido alias en la entrada anterior del blog sobre Fundamentos de la consulta. Si no se asigna un alias al resultado de la consulta arrayLength la clave de la propiedad sería $1 lo cual no es muy intuitivo.

Evaluación de los miembros de la matriz

Mientras que el ArrayFunction.contains le permite comprobar si la matriz dada contiene un valor específico, la función en se puede utilizar para evaluar uno o todos los miembros de una matriz en función de un criterio especificado por la variable satisface expresión. Se trata de una potente función de filtrado de documentos.

Enense utiliza con la expresión cualquier, cada o el anyAndEvery operadores cuantificados en ArrayExpression para evaluar cualquier, todos o cualquier/todos los elementos del objeto array.

La siguiente consulta devuelve los documentos en los que cualquier de los valores del me gusta_público comienza con los caracteres "Corr".

    1. Declara una variable con el nombre "likedby" para representar cada elemento en el me gusta_público matriz
    2. En cualquier ArrayExpression comprueba si el elemento del array representado por la variable me gustaen cumple los criterios de la como expresión. El sitio como comprueba si el valor del elemento representado por la variable "likedby" empieza por "Cor".

Indexación de matrices

También puede consultar elementos en índices específicos. La siguiente consulta devuelve el índice nombre y primer miembro de la me gusta_público matriz de propiedades de todos los documentos "hotel

Evaluación de matrices anidadas

Puede evaluar los miembros de un array anidado. Para ello, puede aplicar un ruta de acceso a la expresión de la variable. La matriz anidada debe tener un nivel de profundidad.

La siguiente consulta devuelve los documentos en los que cualquier de los valores anidados clasificaciones tiene el valor En general calificación de la propiedad superior o igual a 4.
Como habrá observado en el modelo de datos anterior, la propiedad "reviews" contiene una matriz de objetos. Cada uno de los objetos contiene un clasificaciones que a su vez contiene la matriz En general propiedad.

  1. Declarar una variable para representar un elemento del review.ratings.Overall matriz
  2. Declarar una variable para representar cada elemento del reseñas matriz
  3. En cualquier comprueba si el elemento de la matriz representado por revise cumple los criterios de la comparación expresión. El sitio comparación comprueba el valor de En general propiedad del clasificaciones en el objeto representado por la variable "review" es mayor o igual que 4.

Limitaciones

Las capacidades de manipulación de matrices no son tan amplias como las de N1QL conjunto de características. Pero es un buen punto de partida. Estas capacidades pueden estar disponibles en futuras versiones de Couchbase Mobile.

Así que, por ahora, depende de la aplicación manipular los resultados del array utilizando las capacidades de procesamiento de colecciones del lenguaje.

Veamos este ejemplo en swift

  • Refiriéndonos al modelo de datos, digamos que desea determinar el mínimo Limpieza para un hotel determinado en función de las opiniones sobre el mismo.

Del modelo anterior , obsérvese que el Limpieza es un miembro de la propiedad clasificaciones contenida en cada objeto miembro de reseñas matriz.

Para ello, puede realizar una consulta a Couchbase Lite para obtener el archivo reseñas para un hotel con Id especificado de la siguiente manera -

En resultSet La respuesta a la consulta anterior sería un array con un único elemento. Este elemento correspondería al documento "hotel" para el Id especificado.

Ahora, la aplicación tiene que implementar la lógica para iterar sobre los archivos reseñas y, para cada miembro de la matriz, obtener el archivo clasificaciones y la propiedad Limpieza valor.

He aquí una posible forma de hacerlo en swift.

  • Primero, iteramos sobre el resultSet y extraemos el valor de la propiedad "reviews".

Tras el procesamiento del bucle, la matriz "matches" sería algo parecido a lo que se muestra a continuación. Sería un array que contendría el array anidado correspondiente a las reseñas -

  • A continuación, puede utilizar funciones del lenguaje swift como flatMap y mapa procesar la matriz resultante para obtener la calificación mínima de "Limpieza" de un hotel determinado

Se haría algo similar en lenguajes que soportan construcciones funcionales como mapa plano y mapa.

¿Qué sigue?

En esta entrada de blog vimos cómo puedes manejar tipos de colección Array usando el nuevo Query API en Couchbase Mobile 2.0. Esto es un comienzo. Espera ver más funcionalidades en futuras versiones. Puedes descargar la versión preliminar de nuestro descargas página.

Aquí hay otros posts relacionados con Couchbase Mobile Query que pueden ser de interés
- Este entrada del blog analiza los fundamentos de la API de consulta
- Este entrada del blog analiza las funciones de búsqueda de texto completo.
- 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.

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.