{"id":3151,"date":"2017-04-05T13:53:23","date_gmt":"2017-04-05T20:53:23","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3151"},"modified":"2025-06-13T17:23:25","modified_gmt":"2025-06-14T00:23:25","slug":"document-oriented-database-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/document-oriented-database-n1ql\/","title":{"rendered":"Base de datos orientada a documentos y N1QL"},"content":{"rendered":"<p><em><u><a href=\"https:\/\/twitter.com\/@mike_aboagye\" target=\"_blank\" rel=\"noopener noreferrer\">Michael K.<\/a><\/u><u><a href=\"https:\/\/twitter.com\/@mike_aboagye\" target=\"_blank\" rel=\"noopener noreferrer\">\u00a0Aboagy<\/a><\/u><u><a href=\"https:\/\/twitter.com\/@mike_aboagye\" target=\"_blank\" rel=\"noopener noreferrer\">e<\/a><\/u>\u00a0trabaja como ingeniero de seguridad de aplicaciones y pentester web con buenos conocimientos en Linux, Git, PHP, Java, RDMS y desarrollo de bases de datos Nosql. Tambi\u00e9n le gusta incursionar en devops.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3152\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/MIKE-IMAGE.jpg\" alt=\"Michael K. Aboagye\" width=\"199\" height=\"199\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE.jpg 199w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE-150x150.jpg 150w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE-65x65.jpg 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE-50x50.jpg 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE-20x20.jpg 20w\" sizes=\"auto, (max-width: 199px) 100vw, 199px\" \/><\/p>\n<p><strong>Base de datos orientada a documentos y N1QL <\/strong><\/p>\n<p>En este art\u00edculo, compartir\u00e9 mis conocimientos sobre por qu\u00e9 una base de datos orientada a documentos es totalmente diferente de un sistema de gesti\u00f3n de bases de datos relacionales, y por qu\u00e9 una base de datos orientada a documentos funciona mucho mejor que un sistema de gesti\u00f3n de bases de datos relacionales en un mundo en el que el big data avanza sin cesar. Por \u00faltimo, mostrar\u00e9 c\u00f3mo crear una base de datos orientada a documentos con <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/\">Couchbase<\/a> y c\u00f3mo utilizar la sintaxis SQL para ejecutar contra documentos JSON.<\/p>\n<p><strong>Breve introducci\u00f3n a Couchbase<\/strong><\/p>\n<p>Couchbase, al igual que MongoDB, es un producto o sistema de base de datos NoSQL. NoSQL en este contexto significa simplemente que los datos se almacenan sin la ayuda de un lenguaje de consulta estructurado; los datos se almacenan en documentos. Couchbase es una combinaci\u00f3n de dos productos: Memcached y Couchbase.<\/p>\n<p>Couchbase combina las ventajas de Memcached y Couchbase para proporcionar un rendimiento escalable en un cl\u00faster de nodos. Couchbase se encuentra entre una serie de productos NoSQL que han comprometido la consistencia eventual para poner m\u00e1s \u00e9nfasis en la disponibilidad, escalabilidad y tolerancia a la partici\u00f3n.<\/p>\n<p>Seg\u00fan el teorema CAP de Eric Brewer, es imposible que sistemas distribuidos como MongoDB o Couchbase cumplan los tres conceptos: consistencia, disponibilidad y tolerancia parcial. Por lo tanto, Couchbase aborda la consistencia eventual a trav\u00e9s de su caracter\u00edstica avanzada de replicaci\u00f3n, la replicaci\u00f3n cruzada de centros de datos (XDCR), para gestionar eficazmente los fallos de nodos, un problema com\u00fan para la mayor\u00eda de los sistemas de gesti\u00f3n de bases de datos relacionales. proporciona una forma m\u00e1s d\u00e9bil de consistencia conocida como consistencia eventual a trav\u00e9s de la replicaci\u00f3n. Adem\u00e1s, Couchbase tiene su propia forma de gestionar los fallos de nodo, un problema com\u00fan de la mayor\u00eda de los sistemas de gesti\u00f3n de bases de datos relacionales. Couchbase implementa un vBucket conocido como partici\u00f3n l\u00f3gica o sharding. Cada dato de un vBucket se almacena en todos los nodos presentes mediante replicaci\u00f3n. As\u00ed, en caso de fallo de un nodo, Couchbase hace que uno de los vBuckets de r\u00e9plica est\u00e9 disponible autom\u00e1ticamente.<\/p>\n<p>Un nodo de Couchbase Server viene con dos componentes principales - <strong>Gestor de datos<\/strong>\u00a0y <strong>Administrador de cl\u00fasteres<\/strong>.<\/p>\n<p><strong>Administrador de cl\u00fasteres<\/strong>\u00a0- se encarga del entorno del cl\u00faster de Couchbase. Se encarga del reequilibrio de datos entre nodos, proporciona un mapa del cl\u00faster que ayuda a los clientes que solicitan datos concretos a saber d\u00f3nde buscar esos datos, supervisa los nodos, recopila estad\u00edsticas y registra los datos.<\/p>\n<p><strong>Gestor de datos<\/strong>\u00a0- se limita a gestionar el almacenamiento y la recuperaci\u00f3n de datos en documentos. Contiene la cach\u00e9 de memoria, el motor de consulta y el mecanismo de persistencia en disco.<\/p>\n<p>Por \u00faltimo, Couchbase gestiona los datos en buckets. Un bucket en Couchbase es similar a una base de datos en Microsoft SQL Server o MySQL. Un bucket est\u00e1 formado por recursos relacionados pero con esquemas diferentes. Cuando hay m\u00e1s de una o dos bases de datos basadas en aplicaciones, se necesitan dos buckets para gestionar los datos procedentes de esas dos aplicaciones por separado.<\/p>\n<p><strong>Diferencia entre RDBMS y base de datos orientada a documentos<\/strong><\/p>\n<p>Un sistema de base de datos relacional es completamente diferente de una base de datos orientada a documentos en t\u00e9rminos de concepto y estructura (esquema). Adem\u00e1s, una base de datos relacional se construye utilizando comandos SQL que no son demasiado dif\u00edciles de codificar y leer.<\/p>\n<p>En una base de datos relacional, las tablas est\u00e1n vinculadas entre s\u00ed mediante claves externas. La clave ajena es un concepto del sistema de bases de datos SQL por el que una clave ajena consiste en campos comunes que se utilizan para vincular tablas. Adem\u00e1s, los esquemas de las bases de datos relacionales son bastante r\u00edgidos en comparaci\u00f3n con los de las bases de datos orientadas a documentos.<\/p>\n<p>Supongamos que Aero Air dispone de una base de datos relacional para gestionar sus vuelos. La base de datos consta de tres tablas, a saber: Programa de vuelos, Informaci\u00f3n de vuelos y Rutas de vuelos.<\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">ID de vuelo<\/span><\/td>\n<td><span style=\"font-weight: 400\">Nombre del vuelo<\/span><\/td>\n<td><span style=\"font-weight: 400\">NumSeats<\/span><\/td>\n<td><span style=\"font-weight: 400\">Distancia<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">001<\/span><\/td>\n<td><span style=\"font-weight: 400\">Boeing Erv<\/span><\/td>\n<td><span style=\"font-weight: 400\">5,000<\/span><\/td>\n<td><span style=\"font-weight: 400\"> 1318 km<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">002<\/span><\/td>\n<td><span style=\"font-weight: 400\">Airbus Erv<\/span><\/td>\n<td><span style=\"font-weight: 400\">1,000<\/span><\/td>\n<td><span style=\"font-weight: 400\"> 1578 km<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">003<\/span><\/td>\n<td><span style=\"font-weight: 400\">Max Erv<\/span><\/td>\n<td><span style=\"font-weight: 400\">2,000<\/span><\/td>\n<td><span style=\"font-weight: 400\"> 2967 km<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">Rutas C\u00f3digo<\/span><\/td>\n<td><span style=\"font-weight: 400\">ID de vuelo<\/span><\/td>\n<td><span style=\"font-weight: 400\">En<\/span><\/td>\n<td><span style=\"font-weight: 400\">A<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir001<\/span><\/td>\n<td><span style=\"font-weight: 400\">001<\/span><\/td>\n<td><span style=\"font-weight: 400\">Glasgow<\/span><\/td>\n<td><span style=\"font-weight: 400\">Par\u00eds<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir002<\/span><\/td>\n<td><span style=\"font-weight: 400\">002<\/span><\/td>\n<td><span style=\"font-weight: 400\">Bruselas<\/span><\/td>\n<td><span style=\"font-weight: 400\">Bengaluru<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir003<\/span><\/td>\n<td><span style=\"font-weight: 400\">003<\/span><\/td>\n<td><span style=\"font-weight: 400\">Hamburgo<\/span><\/td>\n<td><span style=\"font-weight: 400\">Mosc\u00fa<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">C\u00f3digo de horario<\/span><\/td>\n<td><span style=\"font-weight: 400\">ID de vuelo<\/span><\/td>\n<td><span style=\"font-weight: 400\">Hora de salida<\/span><\/td>\n<td><span style=\"font-weight: 400\">Hora de llegada<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir-010<\/span><\/td>\n<td><span style=\"font-weight: 400\">001<\/span><\/td>\n<td><span style=\"font-weight: 400\">1700 GMT<\/span><\/td>\n<td><span style=\"font-weight: 400\">2000 GMT<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir-012<\/span><\/td>\n<td><span style=\"font-weight: 400\">002<\/span><\/td>\n<td><span style=\"font-weight: 400\">1600 GMT<\/span><\/td>\n<td><span style=\"font-weight: 400\">1300 GMT<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">AeroAir-013<\/span><\/td>\n<td><span style=\"font-weight: 400\">003<\/span><\/td>\n<td><span style=\"font-weight: 400\">1400 GMT<\/span><\/td>\n<td><span style=\"font-weight: 400\">1400 GMT<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>En una base de datos orientada a documentos, el esquema de una base de datos difiere en cada documento de una base de datos. Una base de datos orientada a documentos permite un esquema din\u00e1mico; as\u00ed, un documento puede contener un campo espec\u00edfico o una clave diferente de otros documentos. En una base de datos de documentos t\u00edpica, no se permiten los comandos SQL. Sin embargo, puede utilizar N1QL, tambi\u00e9n denominado \"Nickel\", para ejecutar SQL contra sus documentos.<\/p>\n<p>N1QL es un lenguaje de consulta espec\u00edfico para Couchbase que te permite unir ambos mundos, NoSQL y SQL. Puedes usar N1QL para ejecutar contra un documento JSON, una caracter\u00edstica que hace interesante a N1QL, que exploraremos m\u00e1s adelante.<\/p>\n<p>Para nuestro ejemplo anterior de <strong>Aero Air<\/strong>\u00a0de vuelos, podemos hacer lo mismo utilizando Couchbase nombrando a nuestro bucket \"AeroAir\" para gestionar los datos almacenados. A trav\u00e9s de la <strong>AeroAir<\/strong>\u00a0<strong>cubo<\/strong>Los desarrolladores de Couchbase pueden editar los datos de los documentos.<\/p>\n<p><strong>Creaci\u00f3n de una base de datos orientada a documentos con Couchbase <\/strong><\/p>\n<p>Crear una base de datos orientada a documentos con Couchbase requiere un conocimiento b\u00e1sico del formato JSON.<\/p>\n<p>En primer lugar, supongamos que ya ha instalado Couchbase Server (edici\u00f3n Enterprise o edici\u00f3n Community).<\/p>\n<p>Aqu\u00ed tiene una visi\u00f3n general de Couchbase Server:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/Overview.png\" alt=\"Overview\" width=\"1005\" height=\"604\" \/><\/p>\n<p><strong>C\u00f3mo crear un cubo en Couchbase<\/strong><\/p>\n<p>Antes de poder crear documentos, tienes que crear un bucket para gestionar los datos almacenados. Puedes introducir el nombre que prefieras; yo eleg\u00ed llamar al cubo <strong>AeroAir<\/strong>.\u00a0<img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/Image-2.png\" alt=\"Image 2\" \/><\/p>\n<p>Como puede ver, tenemos un cubo activo, que es el cubo AeroAir.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/Active-bucket-1.png\" alt=\"Active bucket 1\" \/><\/p>\n<p>Supongamos ahora que AeroAir tiene un documento sencillo compuesto por detalles de vuelos relevantes para los viajeros o clientes.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/DOCUMENT-1.png\" alt=\"DOCUMENT 1\" \/><\/p>\n<p>Recuerde que una base de datos orientada a documentos es totalmente diferente y bastante flexible en comparaci\u00f3n con una base de datos relacional perteneciente a la familia SQL. Con una base de datos orientada a documentos, puedes incluir campos adicionales en otros documentos, as\u00ed como excluirlos.<\/p>\n<p>Vamos a crear un documento de vuelo para el Boeing ERV. En el extremo derecho de AeroAir, puedes ver que hay dos botones etiquetados como <strong>Documentos<\/strong>\u00a0y<strong>\u00a0Ver<\/strong>.<strong>\u00a0<\/strong>Haz clic en el bot\u00f3n de documento para crear un nuevo documento de vuelo para nuestro cubo AeroAir.<\/p>\n<p>Usted crea un nuevo documento editando los datos predefinidos en formato JSON con sus propios datos.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/PREDINE.png\" alt=\"PREDINE\" \/><\/p>\n<p>Como puedes ver, he creado un documento de vuelo para Boeing ERV en el cubo AeroAir.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/new-doc.png\" alt=\"new doc\" \/><\/p>\n<p>Adem\u00e1s, he creado cuatro documentos en el cubo AeroAir. Cada documento representa datos de informaci\u00f3n de vuelo, datos de horario de vuelo e informaci\u00f3n de ruta. Puedes seguir creando tantos documentos como quieras para el bucket AeroAir.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/new-doc-set.png\" alt=\"new doc set\" \/><\/p>\n<p>A continuaci\u00f3n se muestra una ilustraci\u00f3n del aspecto de los datos en un documento. Dejar una coma final en un documento JSON se considera v\u00e1lido a menos que la coma del \u00faltimo elemento preceda a la etiqueta de cierre.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/json-example.png\" alt=\"json example\" \/><\/p>\n<p>Si incluye una coma adicional, se le notificar\u00e1 un error JSON. Echa un vistazo al siguiente ejemplo:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/JSON-ERROR.png\" alt=\"JSON ERROR\" \/><\/p>\n<p>Como ya se ha dicho, con una base de datos orientada a documentos se pueden introducir campos ausentes en algunos documentos pero presentes en otros. Esto no afecta a la base de datos en su totalidad porque una base de datos orientada a documentos tiene un esquema muy flexible. Compruebe el ejemplo entre el vuelo Boeing ERV y el Boeing FFH.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/Beoing-ERV-example.png\" alt=\"Beoing ERV example\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/Boeing-ffh-example.png\" alt=\"Boeing ffh example\" \/><\/p>\n<p>Como puede ver, aunque ambos documentos est\u00e1n en el bucket AeroAir, un documento tiene un campo que est\u00e1 ausente en otro documento, pero nuestra base de datos o bucket no se ve afectado.<\/p>\n<p>En Couchbase, acceder a los datos de un documento es bastante diferente de una base de datos relacional donde dependes de la clave primaria para recuperar un valor particular en una fila. En Couchbase puedes usar el Document_ID de un documento para acceder a un documento espec\u00edfico en un bucket una vez que el document ID es v\u00e1lido y el documento existe. Al igual que en una base de datos relacional, el ID de un documento debe ser \u00fanico.<\/p>\n<p>As\u00ed, en nuestro ejemplo de la base de datos AeroAir, utilic\u00e9 el nombre de los vuelos como ID del documento.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/DOCU-id.png\" alt=\"DOCU id\" \/><\/p>\n<p>Ahora que hemos creado documentos en los datos de AeroAir, es hora de que consultemos nuestros documentos.<\/p>\n<p>Couchbase proporciona el lenguaje de consulta N1QL, que es similar a la sintaxis SQL, pero puede operar sobre documentos JSON y los resultados se devuelven en formato JSON.<\/p>\n<p>Conocimientos b\u00e1sicos en MySQL o generalmente SQL son suficientes para llevarte a trav\u00e9s de lo b\u00e1sico y probablemente hacia comandos avanzados de N1QL. Al igual que SQL, N1QL consta de un lenguaje de manipulaci\u00f3n de datos y un lenguaje de definici\u00f3n de datos.<\/p>\n<p>B\u00e1sicamente, utilizar\u00e9 cl\u00e1usulas como SELECT, WHERE y FROM para consultar documentos en AeroAir. Al igual que SQL, N1QL ofrece m\u00e1s de <strong>SELECCIONE<\/strong>, <strong>DESDE<\/strong>y <strong>DONDE<\/strong>. Por ejemplo, puede utilizar la cl\u00e1usula UPDATE si desea actualizar un valor del documento, o INSERT si desea incluir nuevos datos.<\/p>\n<p>Una vez que conozcas la sintaxis SQL a mano, usar Couchbase N1QL contra documentos JSON no deber\u00eda ser un problema.<\/p>\n<p>Nos centraremos en c\u00f3mo <strong>SELECCIONE<\/strong>, <strong>DESDE<\/strong>y <strong>DONDE<\/strong>\u00a0usando las siguientes cl\u00e1usulas para consultar documentos en AeroAir usando Couchbase N1QL.<\/p>\n<p><strong>SELECCIONE<\/strong>\u00a0- Puede utilizar esta cl\u00e1usula para seleccionar un campo espec\u00edfico de un documento, incluyendo un s\u00edmbolo de asterisco despu\u00e9s de la cl\u00e1usula SELECT devuelve todos los campos de los documentos.<\/p>\n<p><strong>DESDE <\/strong><strong>-<\/strong><strong>\u00a0<\/strong>Puede utilizar esta cl\u00e1usula para el bucket de datos con el que trabajar u operar.<\/p>\n<p><strong>DONDE <\/strong><strong>-<\/strong>\u00a0Puede utilizar esta cl\u00e1usula indicando las condiciones que deben tener o satisfacer los documentos recuperados.<\/p>\n<p>Couchbase proporciona un Query Workbench para ejecutar consultas en la consola web y una herramienta cbq si prefieres utilizar la l\u00ednea de comandos.<\/p>\n<p><strong>Utilizaci\u00f3n del Query Workbench<\/strong><\/p>\n<p>Ahora que tenemos algunos documentos en nuestros buckets, probemos algunas consultas b\u00e1sicas sobre uno o dos documentos.<\/p>\n<p>En primer lugar, haga clic en el bot\u00f3n <strong>CONSULTA<\/strong>\u00a0junto a la pesta\u00f1a <strong>\u00cdNDICES<\/strong>\u00a0o entre <strong>CUBOS DE DATOS<\/strong>\u00a0y <strong>\u00cdNDICES<\/strong>.<strong>\u00a0<\/strong>Como puede ver, hay un an\u00e1lisis de cubo que muestra el cubo actual que est\u00e1 siendo gestionado por el sistema. Tambi\u00e9n a la derecha, est\u00e1 el panel de resultados que muestra el resultado devuelto en formato JSON.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/queryaeroair.png\" alt=\"queryaeroair\" \/><\/p>\n<p>Tengo ciertos campos en los documentos para que nuestra consulta sea m\u00e1s interesante. Digamos que estamos interesados en un vuelo fijado con Wi-Fi de Internet. Ejecutando la consulta en la consola web sin crear un \u00edndice primario en el bucket <strong>AeroAir <\/strong>acaba en error.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/create-index.png\" alt=\"create index\" \/><\/p>\n<p>Ahora intente ejecutar la misma consulta en la consola web. Puedes ver que esta vez la consulta se ha ejecutado correctamente.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/flightname.png\" alt=\"flightname\" \/><\/p>\n<p>Puede ver que los resultados se devuelven en formato JSON. Buscamos un vuelo con una velocidad de Internet superior a 100 kbps. Nos ha devuelto el vuelo Boeing FFH como el \u00fanico vuelo que satisface la condici\u00f3n de la consulta. El operador de comparaci\u00f3n significa simplemente <strong>superior a 100 kilobytes por segundo. <\/strong><\/p>\n<p>Puede especificar una condici\u00f3n concreta sin utilizar operadores de comparaci\u00f3n. Digamos que queremos averiguar qu\u00e9 vuelo tiene asignado a Jack Carisma como piloto principal<strong>. <\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/jacvkcharism-a.png\" alt=\"jacvkcharism a\" \/><\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<p>Curiosamente, aunque <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/n1ql\/\">N1QL<\/a> utiliza sintaxis SQL, puede ejecutarse contra documentos JSON. Esto es lo que hace que Couchbase con N1QL sea interesante y una mejor alternativa a una base de datos relacional.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/community\/community-writers-program\/\"><em>Este post forma parte del Programa de Escritura de la Comunidad Couchbase<\/em><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Michael \u00a0K.\u00a0Aboagye\u00a0works as an application security engineer and web pentester with good knowledge in Linux, Git, PHP, Java, RDMS and Nosql database development. He likes to dabble in devops also. Document-Oriented Database and N1QL For this article, I will share [&hellip;]<\/p>\n","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1812],"tags":[1572],"ppma_author":[9026],"class_list":["post-3151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-n1ql-query","tag-database"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Document-Oriented Database and N1QL - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/document-oriented-database-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Document-Oriented Database and N1QL\" \/>\n<meta property=\"og:description\" content=\"Michael \u00a0K.\u00a0Aboagye\u00a0works as an application security engineer and web pentester with good knowledge in Linux, Git, PHP, Java, RDMS and Nosql database development. He likes to dabble in devops also. Document-Oriented Database and N1QL For this article, I will share [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/document-oriented-database-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-05T20:53:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:23:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"199\" \/>\n\t<meta property=\"og:image:height\" content=\"199\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Document-Oriented Database and N1QL\",\"datePublished\":\"2017-04-05T20:53:23+00:00\",\"dateModified\":\"2025-06-14T00:23:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/\"},\"wordCount\":1774,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"database\"],\"articleSection\":[\"Couchbase Server\",\"SQL++ \\\/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/\",\"name\":\"Document-Oriented Database and N1QL - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-04-05T20:53:23+00:00\",\"dateModified\":\"2025-06-14T00:23:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/document-oriented-database-n1ql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Document-Oriented Database and N1QL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/laura-czajkowski\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Base de datos orientada a documentos y N1QL - El blog de Couchbase","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/document-oriented-database-n1ql\/","og_locale":"es_MX","og_type":"article","og_title":"Document-Oriented Database and N1QL","og_description":"Michael \u00a0K.\u00a0Aboagye\u00a0works as an application security engineer and web pentester with good knowledge in Linux, Git, PHP, Java, RDMS and Nosql database development. He likes to dabble in devops also. Document-Oriented Database and N1QL For this article, I will share [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/document-oriented-database-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-05T20:53:23+00:00","article_modified_time":"2025-06-14T00:23:25+00:00","og_image":[{"width":199,"height":199,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/04\/MIKE-IMAGE.jpg","type":"image\/jpeg"}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Document-Oriented Database and N1QL","datePublished":"2017-04-05T20:53:23+00:00","dateModified":"2025-06-14T00:23:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/"},"wordCount":1774,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["database"],"articleSection":["Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/","name":"Base de datos orientada a documentos y N1QL - El blog de Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-04-05T20:53:23+00:00","dateModified":"2025-06-14T00:23:25+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/document-oriented-database-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Document-Oriented Database and N1QL"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laura-czajkowski\/"}]}},"acf":[],"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3151"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3151\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3151"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}