{"id":4160,"date":"2017-10-31T12:15:21","date_gmt":"2017-10-31T19:15:21","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4160"},"modified":"2025-06-13T23:43:17","modified_gmt":"2025-06-14T06:43:17","slug":"n1ql-enhancements-couchbase-server-5","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-enhancements-couchbase-server-5\/","title":{"rendered":"Mejoras de N1QL en Couchbase Server 5.0"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Las mejoras de N1QL han llegado a Couchbase. N1QL es una de las caracter\u00edsticas estrella de Couchbase Server. El lanzamiento de <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">Servidor Couchbase 5.0<\/a> refuerza a\u00fan m\u00e1s N1QL con una serie de mejoras.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Muchas de estas mejoras se han tratado en anteriores entradas del blog (como <a href=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-performance-feature-enhancements-couchbase-5-0\/\">Post de Nic Raboy sobre la mejora del rendimiento<\/a>). Este post no cubrir\u00e1 todas las mejoras de N1QL. Echa un vistazo a <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/introduction\/whats-new.html\">Novedades en Couchbase<\/a> para conocer todos los detalles.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Notas importantes: Para seguir adelante, puede instalar <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">Servidor Couchbase 5.0<\/a> en su m\u00e1quina local. Tambi\u00e9n puede explorar <strong>algunos<\/strong> de estas mejoras de N1QL sin ni siquiera instalar Couchbase Server. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/learn-n1ql-10-minutes-interactive-online-tutorial\/\">Tutorial en l\u00ednea de 10 minutos<\/a>. Adem\u00e1s, este blog se ha escrito con una versi\u00f3n candidata de Couchbase Server que puede diferir ligeramente de la versi\u00f3n actual.<\/em><\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_n1ql_enhancements_for_rbac\">Mejoras de N1QL para RBAC<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Una de las mayores novedades de Couchbase Server 5.0 es el Control de Acceso Basado en Roles (RBAC). Para conocer la historia completa, puedes consultar <a href=\"https:\/\/www.couchbase.com\/blog\/es\/authentication-authorization-rbac-net\/\">entradas anteriores sobre RBAC<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Pero, desde el punto de vista de las mejoras de N1QL, hay dos palabras clave que debes conocer: <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/grant.html#topic_11_5\">SUBVENCI\u00d3N<\/a> y <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/revoke.html#topic_11_5\">REVOCAR<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La documentaci\u00f3n lo cubre bien, pero he aqu\u00ed un ejemplo r\u00e1pido. Crear\u00e9 un usuario \"myuser\", y le dar\u00e9 un solo rol: Lector de datos en el cubo \"muestra-viaje\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08501-create-user.png\" alt=\"Create a user with N1QL enhancements\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Podr\u00eda editar ese usuario en la interfaz de usuario para darle Data Writer.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_grant_and_revoke\">CONCEDER y REVOCAR<\/h3>\n<div class=\"paragraph\">\n<p>Pero he aqu\u00ed c\u00f3mo hacerlo con un <code>SUBVENCI\u00d3N<\/code> Comando N1QL:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-sql\">GRANT data_writer\r\n ON `travel-sample`\r\n TO myuser;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Despu\u00e9s, puedes navegar a la secci\u00f3n \"Seguridad\" de la Consola de Couchbase para ver que \"myuser\" tiene el nuevo permiso.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08502-grant-user-role-n1ql-enhancements.png\" alt=\"GRANT a role to a user as a N1QL enhancement\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede encontrar todos los nombres de funciones (como \"data_writer\") en el archivo <a href=\"https:\/\/docs.couchbase.com\/server\/5.0\/security\/concepts-rbac-for-apps.html\">5.0 documentaci\u00f3n<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>REVOCAR<\/code> funciona de la misma manera, pero a la inversa.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"__code_system_code_keyspaces_for_rbac\"><code>sistema<\/code> espacios de claves para RBAC<\/h3>\n<div class=\"paragraph\">\n<p>Hay un par de <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/monitoring\/monitoring-n1ql-query.html\">nuevos espacios clave del sistema<\/a> que forman parte de las mejoras de N1QL 5.0. <code>SELECT * FROM system:user_info<\/code> devolver\u00e1 informaci\u00f3n sobre cada usuario y sus funciones.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08503-user-info-keyspace.png\" alt=\"User info keyspace\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede utilizar <code>SELECT * FROM sistema:funciones_aplicables<\/code> keyspace para obtener una lista de toda la informaci\u00f3n sobre roles.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta que s\u00f3lo los administradores y los usuarios con la funci\u00f3n \"Consultar el cat\u00e1logo del sistema\" tienen acceso a estos espacios de claves.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_curl\">rizo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En <a href=\"https:\/\/www.couchbase.com\/blog\/es\/curl-comes-n1ql-querying-external-json-data\/\">Isha escribi\u00f3 antes en su blog<\/a>Ahora puedes usar una funci\u00f3n CURL de N1QL para consultar datos JSON externos. Definitivamente hay implicaciones de seguridad cuando se utiliza CURL, as\u00ed que aseg\u00farese de leer la completa <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/curl.html#topic_8_8\">Documentaci\u00f3n N1QL CURL<\/a> antes de decidirse a utilizar esta mejora de N1QL.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de poder utilizar CURL, tengo que a\u00f1adir una URL a una lista blanca. En Windows, esto se hace creando un archivo en la carpeta \/var\/lib\/couchbase\/n1qlcerts (yo tambi\u00e9n tuve que crear la carpeta n1qlcerts) llamado curl_whitelist.json. <em>La ruta completa por defecto para su referencia es: C:Archivos de Programa\\Couchbase\\Server\\var\\lib\\couchbase\\n1qlcerts\\curl_whitelist.json.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>He creado un archivo con una \u00fanica entrada URL (swapi.co es la API de Star Wars):<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">{\r\n\t\"all_access\": false,\r\n\t\"allowed_urls\": [\"https:\/\/swapi.co\"]\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, puede utilizar la funci\u00f3n <code>CURL<\/code> con una consulta N1QL para recuperar datos JSON. Se puede recuperar un solo planeta, por ejemplo, con <a href=\"https:\/\/swapi.co\/api\/planets\/3\/\" class=\"bare\">https:\/\/swapi.co\/api\/planets\/3\/<\/a>o puedes recuperar todos los planetas (que es lo que yo hice):<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT p.name, p.climate, p.residents\r\nFROM CURL(\"https:\/\/swapi.co\/api\/planets\/\").results as p;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Ese punto final devuelve 10 planetas a la vez. Lo reduzco s\u00f3lo al <code>resultados<\/code> y al nombre, el clima y los residentes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08504-curl-result-in-n1ql.png\" alt=\"CURL result in N1QL\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ten en cuenta que CURL a una consulta tambi\u00e9n introduce otros problemas: est\u00e1s cediendo rendimiento y fiabilidad a la fuente de datos externa. Tambi\u00e9n ten en cuenta que puedes usar CURL en la propia API REST de Couchbase Server, lo que abre un mont\u00f3n de posibilidades interesantes.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_indexes\">\u00cdndices<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Como siempre, una buena indexaci\u00f3n es vital para obtener un rendimiento \u00f3ptimo de tus consultas N1QL. Hay un mont\u00f3n de opciones de indexaci\u00f3n en Couchbase Server, que no voy a cubrir en esta entrada del blog. Definitivamente <a href=\"https:\/\/www.couchbase.com\/blog\/es\/gear-n1ql-era-engagement-databases\/\">consulte esta entrada del blog de Prasad Varakur<\/a> y tambi\u00e9n ver algunos de los <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/performance\/index_pushdowns.html\">optimizaciones<\/a> que se han a\u00f1adido a Couchbase en la versi\u00f3n 5.0.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En esta entrada s\u00f3lo voy a hablar de la nueva <strong>\u00edndices adaptativos<\/strong> y <strong>\u00edndices equivalentes<\/strong>.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_adaptive_indexes\">\u00cdndices adaptativos<\/h3>\n<div class=\"paragraph\">\n<p>En versiones anteriores de Couchbase, si quer\u00edas indexar combinaciones de campos, ten\u00edas que crear un \u00edndice para cada combinaci\u00f3n. Por ejemplo, si planeo escribir consultas que comprueben el campo \"tipo\" y \"nombre\" juntos o el campo \"tipo\" y \"edad\" juntos, eso requerir\u00eda dos \u00edndices compuestos: uno para <code>tipo,nombre<\/code> y uno para <code>tipo,estado<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Considere esta consulta:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT l.*\r\nFROM `travel-sample` l\r\nWHERE l.type='landmark'\r\nAND l.state='California';<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Por defecto <code>viaje-muestra<\/code> cubo, el <code>tipo<\/code> pero no el estado. Esta consulta funciona, pero observe lo plano que es el plan de consulta:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08505-index-no-adaptive.png\" alt=\"Query without adaptive index\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Observe tambi\u00e9n que los pasos \"buscar\" y \"filtrar\" tienen que procesar casi 4.500 documentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Los \u00edndices adaptativos facilitan la escritura de \u00edndices que soportan mejor las consultas ad hoc. Pueden utilizarse para indexar campos espec\u00edficos o todos los campos de un documento.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una nueva palabra clave introducida por esta ronda de mejoras de N1QL es <code>SELF<\/code>. Puede crear un \u00edndice adaptativo en todos los campos de todos los documentos \"de referencia\" del bucket de la muestra de viajes de la siguiente manera:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">CREATE INDEX `ai_n1ql_enhancements`\r\n    ON `travel-sample`(DISTINCT PAIRS(SELF))\r\n    WHERE type = 'landmark';<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Tambi\u00e9n puede especificar campos individuales que desee indexar en lugar de <code>SELF<\/code>.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Despu\u00e9s de crear este \u00edndice, ejecute el comando <code>SELECCIONE<\/code> pregunta de nuevo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08506-index-with-adaptive.png\" alt=\"Query with adaptive index\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>F\u00edjese en el escaneo de \u00edndices adicional que se produce para acomodar el <code>estado<\/code> que est\u00e1 consultando. Observe tambi\u00e9n que \"filter\" y \"fetch\" trabajan con menos documentos: s\u00f3lo 1900. Teniendo en cuenta el tama\u00f1o relativamente peque\u00f1o del cubo \"muestra-viaje\", se trata de un ahorro global peque\u00f1o. Con un <em>real<\/em> cubo que contiene millones de documentos, el ahorro de tiempo puede ser considerable.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Adem\u00e1s, a medida que sus consultas se hacen m\u00e1s complejas, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/adaptive-indexing.html\">\u00edndices adaptativos<\/a> le ahorrar\u00e1 trabajo a la vez que mejora su rendimiento.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_index_replicas\">R\u00e9plicas de \u00edndices<\/h3>\n<div class=\"paragraph\">\n<p>Si usted est\u00e1 haciendo un uso intensivo de N1QL en su aplicaci\u00f3n, es posible que desee crear m\u00faltiples \u00edndices que se distribuyen a trav\u00e9s de su cl\u00faster. Estas mejoras de N1QL pueden mejorar el rendimiento, el equilibrio de carga y la disponibilidad.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Hasta Couchbase Server 5, la forma de hacer esto era crear m\u00faltiples \u00edndices id\u00e9nticos con diferentes nombres. Como Venkat cubri\u00f3 en este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-index-replicas\/\">entrada anterior sobre r\u00e9plicas de \u00edndices<\/a>Pero eso tiene sus inconvenientes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>As\u00ed, en Couchbase Server 5, se han introducido r\u00e9plicas de \u00edndices. Al crear un \u00edndice, simplemente usa un <code>num_replica<\/code> para especificar cu\u00e1ntos \u00edndices de r\u00e9plica desea crear.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqu\u00ed tiene un \u00edndice sobre el <code>estado<\/code> que utilic\u00e9 anteriormente en el cubo \"muestra-viaje\". En este caso, voy a replicarlo dos veces.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">CREATE INDEX `ix_state`\r\n    ON `travel-sample`(state)\r\n    WHERE state IS NOT MISSING\r\n    WITH {\"num_replica\":2};<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta que para que esto funcione, necesitar\u00e1 al menos tres nodos que ejecuten el servicio de \u00edndices (1 para el \u00edndice, 2 para las r\u00e9plicas).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Despu\u00e9s de ejecutar la consulta anterior (en un cl\u00faster de 3 nodos), haga clic en \"\u00cdndices\". Deber\u00eda ver que \"ix_state\" aparece 3 veces en tres nodos. Dos de ellos est\u00e1n marcados como \"r\u00e9plica\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08507-index-replicas.png\" alt=\"Index replicas\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Tambi\u00e9n puede especificar los nodos exactos en los que desea las r\u00e9plicas especificando direcciones IP en <code>CREAR \u00cdNDICE<\/code>.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Couchbase se encargar\u00e1 del resto por ti. Las r\u00e9plicas de \u00edndices se utilizar\u00e1n para las consultas entrantes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si no eres nuevo en Couchbase, echa un vistazo a esto <a href=\"https:\/\/www.couchbase.com\/blog\/es\/transition-index-replicas\/\">gu\u00eda sobre la transici\u00f3n de \"\u00edndices equivalentes\" a r\u00e9plicas de \u00edndices<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para m\u00e1s informaci\u00f3n, consulte <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-index-replicas\/\">Entrada del blog de Venkat sobre r\u00e9plicas de \u00edndices<\/a> y el <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/indexes\/index-replication.html\">Documentaci\u00f3n de Couchbase Server 5.0 sobre replicaci\u00f3n de \u00edndices<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_monitoring\">Supervisi\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La tarea m\u00e1s dif\u00edcil al escribir consultas N1QL es asegurarse de que son eficientes y performantes. Para ello, Couchbase Server 5.0 ha introducido una serie de caracter\u00edsticas que te ayudar\u00e1n a monitorizar y perfilar tus consultas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En marzo escrib\u00ed sobre el nuevo <a href=\"https:\/\/www.couchbase.com\/blog\/es\/profiling-monitoring-update\/\">visualizaci\u00f3n del plan de consulta<\/a>. Tambi\u00e9n escrib\u00ed sobre el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/new-profiling-monitoring-couchbase-server-4-6\/\">nuevos espacios clave del sistema<\/a> para supervisar las consultas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede consultar la historia completa en <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/monitoring\/monitoring-n1ql-query.html#topic_nvs_ghr_dz\">Supervisi\u00f3n de las consultas N1QL<\/a> p\u00e1gina de documentaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para este post, s\u00f3lo quiero hacer un r\u00e1pido repaso. Si haces clic en el bot\u00f3n \"Plan\" del Query Workbench, ver\u00e1s una representaci\u00f3n gr\u00e1fica del plan de consulta. Puedes obtener una gu\u00eda visual de las partes de la consulta que requieren m\u00e1s tiempo. Por ejemplo, el plan de consulta para la consulta anterior <code>SELECCIONE<\/code> consulta:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08508-visual-query-plan.png\" alt=\"Visual N1QL query plan\"><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n hay un par de mejoras m\u00e1s en N1QL que te recordamos. Dos nuevos espacios de claves del sistema: <code>sistema:solicitudes_realizadas<\/code> y <code>sistema:solicitudes_activas<\/code>. Estos espacios de claves contienen informaci\u00f3n sobre las consultas que se han ejecutado o se est\u00e1n ejecutando actualmente: cu\u00e1nto tiempo tardan, errores, en qu\u00e9 nodos se ejecutan, etc. Un ejemplo r\u00e1pido:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT r.node\r\nFROM system:completed_requests r;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Como tengo r\u00e9plicas de \u00edndices, esta consulta podr\u00eda haberse ejecutado en distintos nodos. Los resultados muestran que s\u00ed:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">[\r\n  {\r\n    \"node\": \"10.142.173.101:8091\"\r\n  },\r\n  {\r\n    \"node\": \"10.142.173.101:8091\"\r\n  },\r\n  {\r\n    \"node\": \"10.142.173.103:8091\"\r\n  },\r\n  {\r\n    \"node\": \"10.142.173.103:8091\"\r\n  },\r\n  \/\/ ... etc ...\r\n]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>No deje de consultar los dem\u00e1s <a href=\"https:\/\/www.couchbase.com\/blog\/es\/tooling-improvements-couchbase-5-beta\/\">actualizaciones de herramientas<\/a> en Couchbase Server 5.0. No solo N1QL est\u00e1 recibiendo mejoras.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumen<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>N1QL es uno de los principales puntos fuertes de Couchbase Server, y Couchbase se compromete a crear valiosas mejoras de N1QL.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si a\u00fan no ha utilizado N1QL, \u00bfpor qu\u00e9 no prueba la aplicaci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/learn-n1ql-10-minutes-interactive-online-tutorial\/\">Tutorial en l\u00ednea de 10 minutos<\/a> \u00bfHoy?<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u00bfTiene preguntas o comentarios? Encu\u00e9ntrame en <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> o env\u00edeme un correo electr\u00f3nico <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>N1QL enhancements have come to Couchbase. N1QL is one of the flagship features of Couchbase Server. The release of Couchbase Server 5.0 further bolsters N1QL with a range of enhancements. Many of these enhancements have been covered in previous blog [&hellip;]<\/p>","protected":false},"author":71,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1816,1812],"tags":[],"ppma_author":[8937],"class_list":["post-4160","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-couchbase-server","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>N1QL Enhancements in Couchbase Server 5.0 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.\" \/>\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-enhancements-couchbase-server-5\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"N1QL Enhancements in Couchbase Server 5.0\" \/>\n<meta property=\"og:description\" content=\"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-enhancements-couchbase-server-5\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-31T19:15:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:43:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08501-create-user.png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 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-enhancements-couchbase-server-5\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"N1QL Enhancements in Couchbase Server 5.0\",\"datePublished\":\"2017-10-31T19:15:21+00:00\",\"dateModified\":\"2025-06-14T06:43:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/\"},\"wordCount\":1442,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\".NET\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/\",\"name\":\"N1QL Enhancements in Couchbase Server 5.0 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-10-31T19:15:21+00:00\",\"dateModified\":\"2025-06-14T06:43:17+00:00\",\"description\":\"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#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-enhancements-couchbase-server-5\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"N1QL Enhancements in Couchbase Server 5.0\"}]},{\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"N1QL Enhancements in Couchbase Server 5.0 - The Couchbase Blog","description":"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.","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-enhancements-couchbase-server-5\/","og_locale":"es_MX","og_type":"article","og_title":"N1QL Enhancements in Couchbase Server 5.0","og_description":"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/n1ql-enhancements-couchbase-server-5\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-10-31T19:15:21+00:00","article_modified_time":"2025-06-14T06:43:17+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/10\/08501-create-user.png","type":"","width":"","height":""}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"N1QL Enhancements in Couchbase Server 5.0","datePublished":"2017-10-31T19:15:21+00:00","dateModified":"2025-06-14T06:43:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/"},"wordCount":1442,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":[".NET","Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/","url":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/","name":"N1QL Enhancements in Couchbase Server 5.0 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-10-31T19:15:21+00:00","dateModified":"2025-06-14T06:43:17+00:00","description":"There are many N1QL enhancements in the new Couchbase Server 5.0 release. This blog post will help you to scratch the surface.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/n1ql-enhancements-couchbase-server-5\/#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-enhancements-couchbase-server-5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"N1QL Enhancements in Couchbase Server 5.0"}]},{"@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","first_name":"Matthew","last_name":"Groves","user_url":"https:\/\/crosscuttingconcerns.com","author_category":"","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4160","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\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4160"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4160\/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=4160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4160"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}