Couchbase Móvil

Introducción a las consultas JOIN en Couchbase Mobile

Couchbase Lite 2.0 soporta la capacidad de realizar JOINS a través de tus documentos JSON . Esto es parte de 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.

Los JOINS permiten combinar el contenido de múltiples documentos. En este post, proporcionaremos ejemplos para ilustrar los tipos de JOINS posibles con Couchbase Lite. Para cada una de las consultas, proporcionaremos la consulta SQL equivalente. Este blog asume que estás familiarizado con los fundamentos de la nueva API de consultas, así que si aún no lo has hecho, asegúrate de revisar la sección entrada anterior primero. Si le interesa, al final de esta entrada encontrará enlaces a blogs en los que se tratan otras características de la interfaz de consulta.

Puede descargar las últimas versiones de Couchbase Mobile 2.0 Pre-Release 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 en los ejemplos aquí expuestos se utiliza Swift para iOS, la misma interfaz de consulta es compatible también con las plataformas Android y Windows.

Así que, con unos pequeños ajustes, 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 una base de datos de muestra situada aquí. Puede incrustar esta base de datos preconstruida en su aplicación móvil y empezar a utilizarla para sus consultas.

El conjunto de datos de muestra es un poco artificioso, pero el objetivo es demostrar algunos casos típicos de uso de únase a preguntas.

  • "documento de tipo "empleado

  • "documento de tipo "departamento

  • "documento de tipo "localización

** 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

JOIN o Inner JOIN

Puede utilizar una consulta JOIN simple o Inner JOIN para obtener propiedades de los documentos participantes si y sólo si ambos documentos cumplen las condiciones especificadas en el campo EN cláusula.

Por ejemplo, teniendo en cuenta el modelo de datos que hemos presentado anteriormente, supongamos que desea obtener la información firstName, apellido de un "empleado" y la correspondiente nombre del "departamento" al que pertenecía el empleado. En este caso, nombre y apellido se obtienen del documento de tipo "empleado" y el departamento nombre se obtiene del documento de tipo "departamento" si y sólo si el departamento del "empleado" coincide con la propiedad código propiedad en el "departamento

Esto implica que si no hay documentos del "departamento" que coincidan con el código en el documento "empleado", los datos de ese empleado no se incluyen en el resultado de salida

Solicitar

 

ANSI SQL

La sentencia SQL equivalente para la consulta anterior sería

 

Left JOIN o Left Outer JOIN

Puede utilizar una consulta JOIN izquierda para obtener propiedades de los documentos participantes si ambos documentos cumplen las condiciones especificadas en el campo EN . Sin embargo, a diferencia de un JOIN normal, los resultados también incluirán los documentos no coincidentes a la izquierda de la cláusula EN de la expresión JOIN.

Por ejemplo, teniendo en cuenta el modelo de datos que hemos presentado anteriormente, supongamos que desea obtener la información firstName, apellido de un "empleado" y la correspondiente nombre del "departamento" al que pertenecía el empleado.
Además, supongamos que también nos interesa elfirstName y apellido de un "empleado" cuyo departamento código hace no corresponden a un departamento válido. Este podría ser el caso, por ejemplo, si el departamento el código del empleado se ha introducido incorrectamente.

En este caso, nombre y apellido se obtienen del documento de tipo "empleado" y el departamento nombre se obtiene del documento de tipo "departamento" si el departamento del "empleado" coincide con la propiedad código en el "departamento".

Si no hay ningún departamento que coincida, entonces sólo el nombre y apellido del documento "empleado".

Solicitar

ANSI SQL

La sentencia SQL equivalente para la consulta anterior sería

 

Cruz JOIN

Puede utilizar una consulta JOIN cruzada para obtener el producto cartesiano de las propiedades de los documentos participantes, que normalmente no están relacionados entre sí. Es el equivalente de un JOIN interno sin el EN de la expresión join.

Por ejemplo, teniendo en cuenta el modelo de datos que hemos presentado anteriormente, supongamos que desea obtener el producto cartesiano de todos los documentos de tipo "ubicación" y tipo "departamento". En otras palabras, cada "ubicación" tipo documento se combinaría con cada uno de los "departamentos" tipo documentos.

Dado que no hay en especificada en la expresión cross JOIN, deberá incluir una cláusula donde para filtrar el subconjunto de documentos a considerar en función del documento tipo.

Solicitar

ANSI SQL

La sentencia SQL equivalente para la consulta anterior sería

 

Encadenamiento de JOINs

Es posible especificar varias expresiones JOIN en el campo seleccione para poder realizar JOIN entre documentos basados en diferentes criterios.

Por ejemplo, teniendo en cuenta el modelo de datos que hemos presentado anteriormente, supongamos que desea obtener la información firstName, apellido de un "empleado" y la correspondiente nombre del "departamento" al que pertenecía el empleado. Además, también quería identificar el nombre del "lugar" en el que estaba destinado el empleado.

En este caso, utilizamos dos expresiones JOIN.
La primera expresión JOIN se utiliza para JOIN documentos de tipo "empleado" con documentos de tipo "departamento" en función de la propiedad "código de departamento". En este caso, la propiedad nombre y apellido se obtienen del documento de tipo "empleado" y el departamento nombre se obtiene del documento de tipo "departamento" si y sólo si el departamento del "empleado" coincide con la propiedad código en el "departamento".

La segunda expresión JOIN se utiliza para JOIN documentos de tipo "empleado" con documentos de tipo "ubicación" en función de la propiedad "código de ubicación". En este caso, la propiedad nombre y apellido se obtienen del documento de tipo "empleado" y la ubicación nombre se obtiene del documento de tipo "ubicación" si y sólo si el ubicación del "empleado" coincide con la propiedad código en el "departamento".

Solicitar

ANSI SQL

La sentencia SQL equivalente para la consulta anterior sería

 

Unir expresiones con funciones

Aunque en todos los ejemplos se utilizó el equalTo en la expresión JOIN, debe tenerse en cuenta que se puede utilizar cualquier operador de comparación, como por ejemplo entre, greaterThanOrEqualTo etc. en la expresión JOIN. También puede incluir cualquier Función expresiones. Se trata de una función muy potente.

Por ejemplo, teniendo en cuenta el modelo de datos que hemos presentado anteriormente, supongamos que desea obtener el departamento nombre y la correspondiente ubicación nombres de las "sedes" en las que tenía su sede el departamento. Un departamento puede pertenecer a una o varias sedes.
En este caso, la expresión JOIN uniría documentos de tipo "departamento" y "ubicación" buscando coincidencias en cualquiera de los miembros de la cadena ubicación del documento del departamento utilizando la propiedad ArrayFunction expresión.

 

ANSI SQL

Las matrices no están soportadas en SQL. Sin embargo, N1QL incluye soporte para arrays. La sentencia SQL correspondiente para la consulta anterior sería

 

¿Qué sigue?

Esta entrada de blog revisó la poderosa característica JOIN en Couchbase Mobile 2.0 que te permite combinar resultados de múltiples documentos JSON. Puedes descargar Couchbase Mobile 2.0 y probar las consultas discutidas en este post. Esto es un comienzo. Espera ver más funcionalidades en futuras versiones.

Aquí hay algunos otros posts relacionados con Couchbase Mobile Query que pueden ser de interés
- Este entrada del blog analiza los fundamentos
- Este entrada del blog explica cómo consultar colecciones de matrices
- Este entrada del blog discute las capacidades de Búsqueda de Texto Completo (FTS).

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.