{"id":1715,"date":"2014-12-16T18:58:50","date_gmt":"2014-12-16T18:58:49","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1715"},"modified":"2025-06-13T23:52:57","modified_gmt":"2025-06-14T06:52:57","slug":"n1ql-it-makes-cents","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-it-makes-cents\/","title":{"rendered":"N1QL - \u00a1Hace c\u00e9ntimos!"},"content":{"rendered":"<p>*Ba Dum Tschhh* ...\u00bfVes lo que he hecho? \u00bfHace centavos? \u00bfLo pillas? Haha.<\/p>\n<p>As\u00ed que... N1QL (pronunciado Nickel)... el nuevo lenguaje de consulta de nueva generaci\u00f3n de Couchbase; \u00bfqu\u00e9 es?  Bueno, es un lenguaje extensible, legible por humanos, dise\u00f1ado para consultas ad-hoc y operacionales dentro de Couchbase.  Para aquellos que ya est\u00e9n familiarizados con las consultas dentro de Couchbase, este fragmento probablemente tenga sentido para ustedes.  Si no, probablemente no, as\u00ed que perm\u00edtanme aclararlo un poco m\u00e1s.<\/p>\n<p>Pero antes de hacerlo, debo informarte de que este art\u00edculo del blog no es el mejor lugar para que vayas si quieres sumergirte y empezar a aprender N1QL.  Es una visi\u00f3n de N1QL desde la perspectiva de un desarrollador, incluyendo por qu\u00e9 estoy tan entusiasmado con \u00e9l, y las caracter\u00edsticas que estoy orgulloso de se\u00f1alar.  Si quieres empezar a aprender sobre N1QL, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/communities\/n1ql\/\">pulse aqu\u00ed<\/a>.  O si lo prefiere, vaya y pruebe el <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/#1\">Tutorial en l\u00ednea<\/a>.  De todos modos, volviendo a aclarar lo que quiero decir cuando digo N1QL...<\/p>\n<p>\"N1QL es similar al lenguaje SQL est\u00e1ndar para bases de datos relacionales, pero tambi\u00e9n incluye caracter\u00edsticas adicionales; que son adecuadas para bases de datos orientadas a documentos\".   N1QL se ha dise\u00f1ado como un lenguaje de consulta intuitivo para bases de datos estructuradas en torno a documentos en lugar de tablas.  Para localizar y utilizar informaci\u00f3n en una base de datos orientada a documentos, es necesario disponer de la l\u00f3gica y las expresiones correctas para navegar por los documentos y sus estructuras. N1QL proporciona una capa de abstracci\u00f3n clara y f\u00e1cil de entender para consultar y recuperar informaci\u00f3n en su base de datos documental.<\/p>\n<p>Antes de seguir adelante con N1QL, vamos a hablar r\u00e1pidamente sobre el modelado de documentos dentro de Couchbase.  Como probablemente sepas, en Couchbase modelamos nuestros documentos principalmente en JSON.  Todos estamos familiarizados con JSON, as\u00ed que no voy a entrar en detalles, pero una cosa que tenemos que tener en cuenta es el hecho de que: nuestros documentos JSON pueden tener estructuras de datos anidadas complejas, matrices anidadas y objetos que normalmente har\u00edan que la consulta fuera un problema.  Contrario a SQL, N1QL tiene la habilidad de navegar datos anidados porque soporta el concepto de <strong><em>caminos.<\/em><\/strong>\u00a0 Esto es <strong>muy<\/strong> guay.  Podemos usar <em>caminos<\/em> utilizando una sintaxis de anotaci\u00f3n por puntos para darnos la ubicaci\u00f3n l\u00f3gica de un atributo dentro de un documento.  Por ejemplo, si tuvi\u00e9ramos un sitio de comercio electr\u00f3nico con documentos que contuvieran los pedidos de los clientes, podr\u00edamos buscar atributos dentro de esos documentos, hasta un en\u00e9simo nivel anidado. As\u00ed que si quisi\u00e9ramos buscar la calle de env\u00edo del cliente:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">pedidos.envio.calle<\/div>\n<\/div>\n<p>Muy chulo, \u00bfverdad?  Este es tambi\u00e9n uno de los grandes diferenciadores que distinguen a este lenguaje de consulta de SQL.<\/p>\n<p>Como la mayor\u00eda de los que leen esto, yo tambi\u00e9n procedo de SQL.  Creo que puedo asumir que 99% de ustedes tambi\u00e9n, \u00bfverdad?  Si es as\u00ed, te dar\u00e1s cuenta de que N1QL no s\u00f3lo parece familiar, pero se siente familiar tambi\u00e9n, lo que nos da un sentido instant\u00e1neo de valor debido al hecho de que casi sabemos la sintaxis sin aprender nada nuevo.<\/p>\n<p>Ahora vamos a ejecutar algunas consultas y ver qu\u00e9 pasa.  Para estas consultas, las ejecutar\u00e9 contra el cubo de datos de ejemplo \"tutorial\" tal y como se ve en el tutorial en l\u00ednea \/ tutorial de Developer Preview.  En primer lugar, veamos c\u00f3mo se forman las consultas:<\/p>\n<p>Una consulta b\u00e1sica consta de tres partes:<\/p>\n<ul>\n<li><strong><em>SELECCIONE<\/em><\/strong> - Partes del documento a devolver<\/li>\n<li><strong><em>DESDE<\/em><\/strong> - El bucket de datos, o almac\u00e9n de datos con el que trabajar<\/li>\n<li><strong><em>DONDE<\/em><\/strong> - Condiciones que debe cumplir el documento<\/li>\n<\/ul>\n<p>En realidad, la consulta s\u00f3lo requiere la cl\u00e1usula SELECT.  Si ejecutamos la cl\u00e1usula SELECT con un comod\u00edn *, estaremos seleccionando todas las partes del documento. As\u00ed que si ejecutamos la siguiente consulta<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECCIONAR *<br \/>\nDE tutorial<br \/>\nWHERE fname = 'Dave<\/div>\n<\/div>\n<p>Devolveremos el <a href=\"https:\/\/pastebin.com\/raw.php?i=WLikQhTR\">datos como se ve aqu\u00ed...<\/a><\/p>\n<p>Teniendo en cuenta lo que hemos aprendido antes sobre las estructuras de datos anidadas, si cambi\u00e1ramos ese * comod\u00edn para utilizar uno de los atributos anidados del documento '<strong><em>ni\u00f1os <\/em><\/strong>en lugar del comod\u00edn *, podemos devolver de nuestra consulta s\u00f3lo un fragmento del documento.<\/p>\n<p>As\u00ed que corriendo:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECCIONE ni\u00f1os<br \/>\nDE tutorial<br \/>\nWHERE fname = 'Dave<\/div>\n<\/div>\n<p>Volveremos:<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"resultset\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">[<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"ni\u00f1os\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">[<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"edad\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #cc0000\">17<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"fname\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"Aiden\"<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"g\u00e9nero\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"m\"<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"edad\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #cc0000\">2<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"fname\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"Bill\"<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"g\u00e9nero\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"m\"<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">]<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">]<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>Ahora recuerde, tenemos <strong>SIN ESQUEMA FIJO <\/strong>en Couchbase para no perder nada de la incre\u00edble flexibilidad que nos encanta de Couchbase.  Ahora, cuando digo que no tenemos un esquema fijo, quiero decir que Couchbase no impone un esquema; pero nuestros documentos, por supuesto, tienen estructura, dado que son documentos JSON.<\/p>\n<p>La consulta N1QL funciona contra documentos, no contra filas o columnas, al contrario que las bases de datos relacionales.  Dado que los documentos pueden tener atributos anidados y matrices incrustadas, se necesitan unos cuantos <strong><em>operadores\u00a0<\/em><\/strong>son necesarios.  En N1QL, tenemos un <strong>'.' <\/strong>que se utiliza para referirse a los hijos, y un operador <strong><em>'[ ]'<\/em><\/strong> que se utiliza para referirse a un elemento de una matriz.  En realidad, podemos utilizar una combinaci\u00f3n de los operadores para acceder a datos de cualquier profundidad en un documento.<\/p>\n<p>Por ejemplo, si ejecutamos la consulta<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT children[0].fname COMO cname<br \/>\nDE tutorial<br \/>\nWHERE fname='Dave'<\/div>\n<\/div>\n<p>Aqu\u00ed obtenemos el nombre del primer hijo y lo asignamos expl\u00edcitamente a 'cname'.  Los atributos de los documentos hijos se pueden asignar expl\u00edcitamente mediante la funci\u00f3n <strong><em>AS <\/em><\/strong>cl\u00e1usula.<\/p>\n<p>El resultado que devolvemos de esa consulta es:<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"resultset\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">[<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"fname\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"Aiden\"<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">]<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>Las bases de datos de documentos como Couchbase a menudo almacenan metadatos sobre un documento fuera del documento.  En N1QL, utilizamos el <strong><em>META()' <\/em><\/strong>para acceder a los metadatos de cada documento de la base de datos del tutorial de ejemplo.  De esta consulta, los \u00fanicos campos que vamos a devolver son los metadatos del documento.  La consulta es la siguiente<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT META() COMO meta<br \/>\nDE tutorial<\/div>\n<\/div>\n<p>Y los resultados <a href=\"https:\/\/pastebin.com\/raw.php?i=UA69U2jx\">puede verse aqu\u00ed...<\/a><\/p>\n<p>En las consultas anteriores, utilizamos el <strong><em>\"DONDE <\/em><\/strong>para buscar un \u00fanico documento, pero tambi\u00e9n podemos utilizar otros operadores de comparaci\u00f3n para buscar varios documentos.  Supongamos, por ejemplo, que queremos encontrar a todas las personas de nuestra base de datos cuya edad sea superior a 30 a\u00f1os; podemos ejecutar la siguiente consulta:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT fname, edad<br \/>\nDE tutorial<br \/>\nWHERE edad &gt; 30<\/div>\n<\/div>\n<p>Que devolver\u00e1 <a href=\"https:\/\/pastebin.com\/raw.php?i=GDvPeNVG\">este conjunto de resultados...<\/a><\/p>\n<p>Se admiten todos los operadores de comparaci\u00f3n est\u00e1ndar, como (&gt;, &gt;=, &lt;, &lt;=, = y !=).  Todas estas comparaciones tambi\u00e9n tienen en cuenta el tipo del valor, por lo que <strong><em>puntuaci\u00f3n &gt; 8<\/em><\/strong>devolver\u00e1 los documentos que contengan una puntuaci\u00f3n num\u00e9rica superior a 8.<\/p>\n<p>Una de las caracter\u00edsticas m\u00e1s interesantes, en mi opini\u00f3n, es la forma en que podemos hacer coincidir patrones utilizando la funci\u00f3n <strong><em>LIKE <\/em><\/strong>en la cl\u00e1usula WHERE.  Digamos, por ejemplo, que necesitamos encontrar a todas las personas de nuestra base de datos que tengan una direcci\u00f3n de correo electr\u00f3nico con yahoo.com.  Podemos ejecutar una consulta utilizando el operador '<strong><em>LIKE'<\/em><\/strong> para buscar las direcciones de correo electr\u00f3nico.  En esta consulta, utilizaremos \"%\" como comod\u00edn que coincidir\u00e1 con 0 o m\u00e1s caracteres.  Tambi\u00e9n podr\u00edamos utilizar \"_\" si quisi\u00e9ramos que coincidiera exactamente con un car\u00e1cter.  As\u00ed pues, la consulta para encontrar a todas las personas de nuestra base de datos que utilicen una direcci\u00f3n de correo electr\u00f3nico de yahoo.com es:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECCIONE fname, email<br \/>\nDE tutorial<br \/>\nWHERE email LIKE '%@yahoo.com'<\/div>\n<\/div>\n<p>Como puede ver, hemos incluido el <strong><em>LIKE <\/em><\/strong>en nuestra cl\u00e1usula WHERE para que coincida con las direcciones de correo electr\u00f3nico.  El conjunto de resultados que devolver\u00e1 la consulta es el siguiente...<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family: monospace\"><span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"resultset\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #009900\">[<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"email\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"harry@yahoo.com\"<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"fname\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"Harry\"<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">{<\/span><br \/>\n<span style=\"color: #3366cc\">\"email\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"dave@yahoo.com\"<\/span><span style=\"color: #339933\">,<\/span><br \/>\n<span style=\"color: #3366cc\">\"fname\"<\/span><span style=\"color: #339933\">:<\/span> <span style=\"color: #3366cc\">\"Dave\"<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><br \/>\n<span style=\"color: #009900\">]<\/span><br \/>\n<span style=\"color: #009900\">}<\/span><\/div>\n<\/div>\n<p>Personalmente, \u00a1creo que esta es una de las caracter\u00edsticas m\u00e1s \u00fatiles de N1QL!  Pero digamos que queremos hacer lo contrario de lo que acabamos de hacer, y queremos listar todas las personas que <strong>no <\/strong>coinciden con la direcci\u00f3n de correo electr\u00f3nico yahoo.com.  Otra funci\u00f3n muy \u00fatil es la funci\u00f3n '<strong><em>NO ME GUSTA<\/em><\/strong> que podemos utilizar para encontrar documentos que no coincidan con el patr\u00f3n.<\/p>\n<p>Por supuesto, podemos combinar varias condiciones utilizando la funci\u00f3n <strong>'<em>Y<\/em> <\/strong>operador.  Por ejemplo, si quisi\u00e9ramos devolver personas que tienen al menos un hijo y una direcci\u00f3n de correo electr\u00f3nico de gmail, ejecutar\u00edamos:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT fname, email, children<br \/>\nDE tutorial<br \/>\nWHERE LENGTH(children) &gt; 0 AND email LIKE '%@gmail.com'<\/div>\n<\/div>\n<p>Tambi\u00e9n podr\u00edamos sustituir este<strong><em>Y <\/em><\/strong>con el operador '<strong><em>O <\/em><\/strong>para que coincida con varias condiciones.<\/p>\n<p>Las similitudes con las consultas SQL contin\u00faan cuando pasamos a ordenar y paginar los resultados de nuestras consultas.  N1QL ha incluido el conocido <strong><em>ORDENAR POR <\/em><\/strong>para poder ordenar los resultados de la consulta.  Las consultas pueden producir muchos resultados si tenemos un conjunto de datos muy grande, por lo que es posible que queramos paginar nuestros resultados.  Buenas noticias.  Tambi\u00e9n podemos hacerlo.  Una consulta que incluya una cl\u00e1usula <strong><em>ORDENAR POR<\/em><\/strong> y una cl\u00e1usula <strong><em>L\u00cdMITE <\/em><\/strong>paginador podr\u00eda tener el siguiente aspecto:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT fname, edad<br \/>\nDE tutorial<br \/>\nORDER BY edad<br \/>\nL\u00cdMITE 2<\/div>\n<\/div>\n<p>Podemos crear agregados de datos en nuestro conjunto de datos utilizando comandos como el comando <strong><em>COUNT()' <\/em><\/strong>que nos dir\u00e1 cu\u00e1ntos documentos hay en nuestro cubo.  Tambi\u00e9n podemos agrupar nuestros datos utilizando la conocida funci\u00f3n '<strong><em>GROUP BY' <\/em><\/strong>.  Si quisi\u00e9ramos filtrar el conjunto de resultados en funci\u00f3n de los grupos devueltos, podemos utilizar la cl\u00e1usula '<strong><em>TENIENDO <\/em><\/strong>donde habr\u00edamos utilizado la cl\u00e1usula '<strong><em>DONDE <\/em><\/strong>para filtrar documentos.<\/p>\n<p>Si quisi\u00e9ramos devolver s\u00f3lo los grupos que tienen m\u00e1s de un miembro, podemos escribir una consulta como la siguiente:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECT relaci\u00f3n, COUNT(*) COMO recuento<br \/>\nDE tutorial<br \/>\nGROUP BY relaci\u00f3n<br \/>\nTENER COUNT(*) &gt; 1<\/div>\n<\/div>\n<p>Una \u00faltima caracter\u00edstica que me gustar\u00eda mencionar es el hecho de que podemos hacer <strong><em>uniones dentro de un documento (tambi\u00e9n denominadas anidamiento o aplanamiento).<\/em><\/strong>\u00a0 Esto significa que podemos tomar el contenido de matrices anidadas y unirlas con el objeto padre.  As\u00ed, por ejemplo, si queremos unir Dave con cada uno de sus 2 hijos, podemos escribir una consulta como la siguiente:<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace\">SELECCIONAR *<br \/>\nFROM tutorial AS contact<br \/>\nOVER ni\u00f1o IN contacto.ni\u00f1os<br \/>\nWHERE contacto.fname = 'Dave'<\/div>\n<\/div>\n<p>Esta consulta devolver\u00eda el conjunto de resultados como <a href=\"https:\/\/pastebin.com\/raw.php?i=pKAK1Fha\">que puedes ver aqu\u00ed...<\/a><\/p>\n<p>Bueno, con esto he terminado las caracter\u00edsticas de N1QL que realmente quer\u00eda mostrar.  Personalmente, creo que este es uno de los proyectos m\u00e1s emocionantes de Couchbase, me encanta la sintaxis de N1QL y creo que el proyecto en s\u00ed es fant\u00e1stico.<\/p>\n<p>Si desea empezar a utilizar N1QL, puede descargar la versi\u00f3n preliminar para desarrolladores visitando la p\u00e1gina <a href=\"https:\/\/www.couchbase.com\/blog\/es\/communities\/n1ql\/\">N1QL de nuestro portal comunitario.<\/a><\/p>\n<p>Si desea profundizar en el tutorial en l\u00ednea de 15 minutos, puede <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/#1\">h\u00e1galo aqu\u00ed.<\/a><\/p>\n<p>Y si quieres una gu\u00eda m\u00e1s detallada de la Developer Preview de N1QL, puedes consultar la documentaci\u00f3n oficial en <a href=\"https:\/\/docs.couchbase.com\/couchbase-query-language-0.1\/\">haciendo clic aqu\u00ed.<\/a><\/p>\n<p>Espero que este blog te haya inspirado para empezar a usar N1QL, ya que es incre\u00edblemente divertido de usar y una pieza muy cool de la tecnolog\u00eda.  Si usted tiene alguna pregunta sobre sus aventuras en el mundo N1QL, os animo a preguntar en nuestro <a href=\"https:\/\/www.couchbase.com\/blog\/es\/communities\/n1ql\/\">Portal comunitario N1QL<\/a> y los profesionales le responder\u00e1n.<\/p>\n<p>\u00a1An\u00edmate y sum\u00e9rgete en el mundo N1QL!  \u00a1Nos vemos all\u00ed!<\/p>\n<p><strong>- Robin Johnson<\/strong><br \/>\nDefensor del Desarrollador, Europa<\/p>","protected":false},"excerpt":{"rendered":"<p>*Ba Dum Tschhh*\u00a0 \u2026See what I did there? Makes cents? Get it? Haha. So\u2026 N1QL (pronounced Nickel)\u2026 Couchbase\u2019s new next-generation query language; what is it?\u00a0 Well, it\u2019s a rather genius designed, human readable \/ writable, extensible language designed for ad-hoc [&hellip;]<\/p>","protected":false},"author":2,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1812],"tags":[],"ppma_author":[8968],"class_list":["post-1715","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>N1QL - It Makes Cents! - 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\/n1ql-it-makes-cents\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"N1QL - It Makes Cents!\" \/>\n<meta property=\"og:description\" content=\"*Ba Dum Tschhh*\u00a0 \u2026See what I did there? Makes cents? Get it? Haha. So\u2026 N1QL (pronounced Nickel)\u2026 Couchbase\u2019s new next-generation query language; what is it?\u00a0 Well, it\u2019s a rather genius designed, human readable \/ writable, extensible language designed for ad-hoc [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-it-makes-cents\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T18:58:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:52:57+00:00\" \/>\n<meta name=\"author\" content=\"The Couchbase Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"The Couchbase Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/\"},\"author\":{\"name\":\"The Couchbase Team\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/764f4a6771ee19bc7af70b70a326fb93\"},\"headline\":\"N1QL &#8211; It Makes Cents!\",\"datePublished\":\"2014-12-16T18:58:49+00:00\",\"dateModified\":\"2025-06-14T06:52:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/\"},\"wordCount\":1819,\"commentCount\":21,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/\",\"name\":\"N1QL - It Makes Cents! - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T18:58:49+00:00\",\"dateModified\":\"2025-06-14T06:52:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#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\/n1ql-it-makes-cents\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"N1QL &#8211; It Makes Cents!\"}]},{\"@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\/764f4a6771ee19bc7af70b70a326fb93\",\"name\":\"The Couchbase Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/7befc37d02226b59499817eafdec60c3\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b4c18c758421903398e84d6c9560f319f39c665798d7d23e6a6f9dff8a8f984e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b4c18c758421903398e84d6c9560f319f39c665798d7d23e6a6f9dff8a8f984e?s=96&d=mm&r=g\",\"caption\":\"The Couchbase Team\"},\"description\":\"Jennifer Garcia is a Senior Web Manager at Couchbase Inc. As the website manager, Jennifer has overall responsibility for the website properties including design, implementation, content, and performance.\",\"sameAs\":[\"https:\/\/www.couchbase.com\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/jennifer-garcia\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"N1QL - It Makes Cents! - The Couchbase Blog","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\/n1ql-it-makes-cents\/","og_locale":"es_MX","og_type":"article","og_title":"N1QL - It Makes Cents!","og_description":"*Ba Dum Tschhh*\u00a0 \u2026See what I did there? Makes cents? Get it? Haha. So\u2026 N1QL (pronounced Nickel)\u2026 Couchbase\u2019s new next-generation query language; what is it?\u00a0 Well, it\u2019s a rather genius designed, human readable \/ writable, extensible language designed for ad-hoc [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-it-makes-cents\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T18:58:49+00:00","article_modified_time":"2025-06-14T06:52:57+00:00","author":"The Couchbase Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"The Couchbase Team","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/"},"author":{"name":"The Couchbase Team","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/764f4a6771ee19bc7af70b70a326fb93"},"headline":"N1QL &#8211; It Makes Cents!","datePublished":"2014-12-16T18:58:49+00:00","dateModified":"2025-06-14T06:52:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/"},"wordCount":1819,"commentCount":21,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/","url":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/","name":"N1QL - It Makes Cents! - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T18:58:49+00:00","dateModified":"2025-06-14T06:52:57+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-it-makes-cents\/#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\/n1ql-it-makes-cents\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"N1QL &#8211; It Makes Cents!"}]},{"@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\/764f4a6771ee19bc7af70b70a326fb93","name":"El equipo de Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/7befc37d02226b59499817eafdec60c3","url":"https:\/\/secure.gravatar.com\/avatar\/b4c18c758421903398e84d6c9560f319f39c665798d7d23e6a6f9dff8a8f984e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b4c18c758421903398e84d6c9560f319f39c665798d7d23e6a6f9dff8a8f984e?s=96&d=mm&r=g","caption":"The Couchbase Team"},"description":"Jennifer Garcia es Gerente Senior de Web en Couchbase Inc. Como responsable del sitio web, Jennifer tiene la responsabilidad general de las propiedades del sitio web, incluido el dise\u00f1o, la implementaci\u00f3n, el contenido y el rendimiento.","sameAs":["https:\/\/www.couchbase.com"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jennifer-garcia\/"}]}},"authors":[{"term_id":8968,"user_id":2,"is_guest":0,"slug":"jennifer-garcia","display_name":"The Couchbase Team","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b4c18c758421903398e84d6c9560f319f39c665798d7d23e6a6f9dff8a8f984e?s=96&d=mm&r=g","author_category":"","last_name":"Garcia","first_name":"Jennifer","job_title":"","user_url":"https:\/\/www.couchbase.com","description":"Jennifer Garcia es Gerente Senior de Web en Couchbase Inc. Como responsable del sitio web, Jennifer tiene la responsabilidad general de las propiedades del sitio web, incluido el dise\u00f1o, la implementaci\u00f3n, el contenido y el rendimiento."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1715","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1715"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1715\/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=1715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1715"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}