{"id":13596,"date":"2022-07-26T08:37:35","date_gmt":"2022-07-26T15:37:35","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=13596"},"modified":"2025-06-13T17:20:45","modified_gmt":"2025-06-14T00:20:45","slug":"from-n1ql-to-javascript-and-back-part-2","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/from-n1ql-to-javascript-and-back-part-2\/","title":{"rendered":"De N1QL para JavaScript e vice-versa - Parte 2: Uso b\u00e1sico"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/from-n1ql-to-javascript-and-back-part-1-introduction\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">O blog anterior<\/span><\/a><span style=\"font-weight: 400;\"> apresentou a voc\u00ea novos recursos em fun\u00e7\u00f5es definidas pelo usu\u00e1rio em JavaScript.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Agora vamos explor\u00e1-los em mais detalhes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Come\u00e7amos com um mecanismo b\u00e1sico para executar instru\u00e7\u00f5es N1QL dentro do c\u00f3digo JavaScript.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">N1QL em JavaScript<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">H\u00e1 duas maneiras de executar instru\u00e7\u00f5es N1QL dentro de uma fun\u00e7\u00e3o JavaScript: chamando diretamente uma fun\u00e7\u00e3o apropriadamente chamada N1QL() ou permitindo que o compilador JavaScript detecte instru\u00e7\u00f5es N1QL incorporadas e produza chamadas N1QL() correspondentes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cada m\u00e9todo \u00e9 examinado a seguir.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Exemplo de pr\u00e9-requisitos<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">As se\u00e7\u00f5es a seguir cont\u00eam v\u00e1rios exemplos.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Eles s\u00e3o totalmente funcionais, mas para execut\u00e1-los voc\u00ea precisar\u00e1:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">um cluster do Couchbase, vers\u00e3o 7.1 ou mais recente<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">um balde chamado <\/span><i><span style=\"font-weight: 400;\">b1<\/span><\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">um \u00edndice prim\u00e1rio em <\/span><i><span style=\"font-weight: 400;\">b1<\/span><\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">para criar cada fun\u00e7\u00e3o em uma biblioteca chamada <\/span><i><span style=\"font-weight: 400;\">udfblog<\/span><\/i><span style=\"font-weight: 400;\">e<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">para criar o UDF N1QL correspondente<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Voc\u00ea pode usar a guia UDF no console da Web para criar a fun\u00e7\u00e3o e a UDF.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Fun\u00e7\u00e3o N1QL()<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">O <em>N1QL()<\/em> recebe uma declara\u00e7\u00e3o na forma de uma cadeia de caracteres e um segundo par\u00e2metro opcional que cont\u00e9m valores de espa\u00e7o reservado.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tudo o que \u00e9 necess\u00e1rio para executar uma instru\u00e7\u00e3o N1QL que n\u00e3o recebe par\u00e2metros e n\u00e3o retorna valores \u00e9 o seguinte:\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13598 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/07\/snippet1-1024x101.jpg\" alt=\"\" width=\"900\" height=\"89\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-1024x101.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-300x29.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-768x75.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-1536x151.jpg 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-20x2.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1-1320x130.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet1.jpg 2016w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">e o UDF correspondente:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">CREATE FUNCTION doInsert() LANGUAGE JAVASCRIPT AS \"doInsert\" AT \"udfblog\"<\/pre>\n<p><span style=\"font-weight: 400;\">(Esque\u00e7a por um segundo que a fun\u00e7\u00e3o em si n\u00e3o retorna nenhum valor. Al\u00e9m disso, pe\u00e7o desculpas pelos trechos de c\u00f3digo mostrados como imagens, pois o WordPress n\u00e3o gostou de renderiz\u00e1-los como texto).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quando o <em>N1QL()<\/em> \u00e9 chamada, a declara\u00e7\u00e3o passada no primeiro par\u00e2metro \u00e9 analisada, planejada e executada.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Se a instru\u00e7\u00e3o n\u00e3o retornar nenhum valor, no momento em que a fun\u00e7\u00e3o N1QL retornar, a instru\u00e7\u00e3o ter\u00e1 conclu\u00eddo a execu\u00e7\u00e3o: nesse caso espec\u00edfico, supondo que o bucket <\/span><i><span style=\"font-weight: 400;\">b1<\/span><\/i><span style=\"font-weight: 400;\"> existe e uma chave <\/span><i><span style=\"font-weight: 400;\">k1<\/span><\/i><span style=\"font-weight: 400;\"> ainda n\u00e3o existir, um novo documento ser\u00e1 inserido.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Se voc\u00ea estiver familiarizado com ESQL\/C ou PL\/SQL <\/span><em><span style=\"font-weight: 400;\">EXECUTAR IMEDIATAMENTE<\/span><\/em><span style=\"font-weight: 400;\"> declara\u00e7\u00e3o, o <em>N1QL()<\/em> \u00e9 o equivalente em UDF do JavaScript.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Quando os valores s\u00e3o retornados, o valor de retorno de <em>N1QL()<\/em> \u00e9 um iterador JavaScript, que pode ser usado para coletar valores um de cada vez, como veremos mais adiante.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">N1QL din\u00e2mico<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Obviamente, o outro uso do <em>N1QL()<\/em> \u00e9 criar uma declara\u00e7\u00e3o dinamicamente concatenando cadeias de caracteres, por exemplo:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13599\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/07\/snippet2-1024x186.jpg\" alt=\"\" width=\"900\" height=\"163\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-1024x186.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-300x55.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-768x140.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-1536x279.jpg 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-20x4.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2-1320x240.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet2.jpg 2014w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Embora isso seja perfeitamente legal, provavelmente \u00e9 melhor n\u00e3o empregar essa t\u00e9cnica devido ao risco de inje\u00e7\u00e3o de N1QL (ou, de modo mais geral, de SQL) que ela acarreta.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Em vez disso, use marcadores de posi\u00e7\u00e3o.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Transpilador de JavaScript<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">A segunda maneira de executar o N1QL \u00e9 incorporar a instru\u00e7\u00e3o N1QL no corpo da fun\u00e7\u00e3o e permitir que o transpilador (um componente do compilador JavaScript) a detecte e crie as chamadas N1QL corretas nos bastidores:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Isso \u00e9 muito conveniente para executar declara\u00e7\u00f5es est\u00e1ticas imediatamente, e a fun\u00e7\u00e3o de repente se torna muito mais leg\u00edvel.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-13600\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/07\/snippet3-1024x102.jpg\" alt=\"\" width=\"900\" height=\"90\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-1024x102.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-300x30.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-768x76.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-1536x153.jpg 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-20x2.jpg 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3-1320x131.jpg 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/07\/snippet3.jpg 2010w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<h2><span style=\"font-weight: 400;\">Espa\u00e7os reservados para instru\u00e7\u00f5es N1QL e valores de espa\u00e7o reservado<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">A melhor maneira de evitar os riscos associados \u00e0 gera\u00e7\u00e3o din\u00e2mica de N1QL \u00e9 ter instru\u00e7\u00f5es est\u00e1ticas usando placeholders nomeados ou posicionais e passando valores de placeholder no momento da execu\u00e7\u00e3o.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Fun\u00e7\u00e3o N1QL()<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Ao usar o <em>N1QL()<\/em> isso pode ser feito passando os valores no segundo argumento opcional, como a seguir.<\/span><\/p>\n<h4><span style=\"font-weight: 400;\">Par\u00e2metros posicionais<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Esse caso \u00e9 coberto pela passagem de uma matriz de valores:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert() {\r\n\u00a0\u00a0\u00a0\u00a0var q = N1QL(\"insert into b1 values(\\\"k4\\\", {\\\"f1\\\": $1})\", [4]);\r\n}<\/pre>\n<h4><span style=\"font-weight: 400;\">Par\u00e2metros nomeados<\/span><\/h4>\n<p><span style=\"font-weight: 400;\">Nesse caso, basta passar um objeto cujo nome de campo corresponda aos nomes dos par\u00e2metros:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert() {\r\n\u00a0\u00a0\u00a0\u00a0var q = N1QL(\"insert into b1 values(\\\"k5\\\", {\\\"f1\\\": $p1})\", { p1: 5});\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">N\u00e3o \u00e9 poss\u00edvel misturar par\u00e2metros posicionais e nomeados, o <em>N1QL()<\/em> aceita apenas uma matriz ou um objeto.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Observe que os valores passados para <em>N1QL()<\/em> n\u00e3o precisam ser literais, voc\u00ea pode construir matrizes e objetos a partir de vari\u00e1veis ou pode passar uma matriz ou vari\u00e1vel de objeto:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert() {\r\n\u00a0\u00a0\u00a0\u00a0let p1 = 6;\r\n\u00a0\u00a0\u00a0\u00a0var q = N1QL(\"insert into b1 values(\\\"k6\\\", {\\\"f1\\\": $1})\", [p1]);\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">ou<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert() {\r\n\u00a0\u00a0\u00a0\u00a0let p1 = [7];\r\n\u00a0\u00a0\u00a0\u00a0var q = N1QL(\"insert into b1 values(\\\"k7\\\", {\\\"f1\\\": $1})\", p1);\r\n}<\/pre>\n<h3><span style=\"font-weight: 400;\">Transpilador<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Com o transpilador, somente par\u00e2metros nomeados s\u00e3o poss\u00edveis; no entanto, us\u00e1-los \u00e9 t\u00e3o simples quanto usar vari\u00e1veis j\u00e1 declaradas:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert() {\r\n\u00a0\u00a0\u00a0\u00a0let p1 = 8;\r\n\u00a0\u00a0\u00a0\u00a0var q = insert into b1 values(\"k8\", {\"f1\": $p1});\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">\u00c9 claro que \u00e9 poss\u00edvel usar par\u00e2metros de fun\u00e7\u00e3o diretamente:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">function doInsert(p1) {\r\n\u00a0\u00a0\u00a0\u00a0var q = insert into b1 values(\"k9\", {\"k1\": $p1});\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">E o UDF N1QL correspondente:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:default decode:true\">CREATE FUNCTION doInsert(p1) LANGUAGE JAVASCRIPT AS \"doInsert\" AT \"udfblog\"<\/pre>\n<h2><span style=\"font-weight: 400;\">Conclus\u00e3o<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Abordamos exemplos b\u00e1sicos de como usar o N1QL dentro de fun\u00e7\u00f5es javascript, ambos usando o <em>N1QL()<\/em> e a incorpora\u00e7\u00e3o da instru\u00e7\u00e3o N1QL diretamente no JavaScript, al\u00e9m de mostrar como usar par\u00e2metros nomeados e posicionais.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A pr\u00f3xima postagem do blog abordar\u00e1 o iterador e as instru\u00e7\u00f5es de manipula\u00e7\u00e3o de dados.<\/span><\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>The previous blog introduced to you new features in JavaScript user-defined functions. We are now going to explore them in more detail. We start with a basic mechanism to execute N1QL statements inside JavaScript code. N1QL in JavaScript There are [&hellip;]<\/p>","protected":false},"author":1782,"featured_media":12241,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,9327,1812],"tags":[2133,1543,8911],"ppma_author":[8924],"class_list":["post-13596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-javascript","category-n1ql-query","tag-functions","tag-javascript","tag-udf"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>N1QL in JavaScript &amp; N1QL() Function (Part 2: Basic Usage)<\/title>\n<meta name=\"description\" content=\"In the previous blog introduced to you new features in JavaScript user-defined functions. We are now going to explore them in more detail. Learn more.\" \/>\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\/pt\/from-n1ql-to-javascript-and-back-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From N1QL to JavaScript and Back - Part 2: Basic Usage\" \/>\n<meta property=\"og:description\" content=\"In the previous blog introduced to you new features in JavaScript user-defined functions. We are now going to explore them in more detail. Learn more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/from-n1ql-to-javascript-and-back-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-26T15:37:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:20:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marco Greco, Software Architect, 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=\"Marco Greco, Software Architect, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/\"},\"author\":{\"name\":\"Marco Greco, Software Architect, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2b5184a7cdb443ff2897aff0866cd6fd\"},\"headline\":\"From N1QL to JavaScript and Back &#8211; Part 2: Basic Usage\",\"datePublished\":\"2022-07-26T15:37:35+00:00\",\"dateModified\":\"2025-06-14T00:20:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/\"},\"wordCount\":714,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg\",\"keywords\":[\"functions\",\"javascript\",\"User Defined Function (UDF)\"],\"articleSection\":[\"Couchbase Server\",\"JavaScript\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/\",\"name\":\"N1QL in JavaScript & N1QL() Function (Part 2: Basic Usage)\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg\",\"datePublished\":\"2022-07-26T15:37:35+00:00\",\"dateModified\":\"2025-06-14T00:20:45+00:00\",\"description\":\"In the previous blog introduced to you new features in JavaScript user-defined functions. We are now going to explore them in more detail. Learn more.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg\",\"width\":1200,\"height\":628,\"caption\":\"Learn how to import and denormalize your data from a relational database into Couchbase using N1QL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From N1QL to JavaScript and Back &#8211; Part 2: Basic Usage\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\/2b5184a7cdb443ff2897aff0866cd6fd\",\"name\":\"Marco Greco, Software Architect, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/707c967b795fd71b6330f6d3118cf308\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6be0ee56851d2f71a554731d5edd5c820069680f0a810b47f094091c58bc553?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6be0ee56851d2f71a554731d5edd5c820069680f0a810b47f094091c58bc553?s=96&d=mm&r=g\",\"caption\":\"Marco Greco, Software Architect, Couchbase\"},\"description\":\"In a previous life, Marco used to be CTO, radiation physicist, software architect, sysadmin, DBA, trainer and general handyman at Italy's largest radiation theraphy practice. Having switched career and country, he spent more than two decades in various support and development positions in Informix first and IBM later, before finally taking the plunge and joining Couchbase, to help them make gold out of N1QL. He holds several patents and has authored open source projects of his own.\",\"sameAs\":[\"https:\/\/github.com\/marcogrecopriolo\",\"https:\/\/www.linkedin.com\/in\/marco-greco-7665308\/\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/marcocouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"N1QL in JavaScript & N1QL() Function (Part 2: Basic Usage)","description":"No blog anterior, apresentamos os novos recursos das fun\u00e7\u00f5es definidas pelo usu\u00e1rio do JavaScript. Agora vamos explor\u00e1-los em mais detalhes. Saiba mais.","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\/pt\/from-n1ql-to-javascript-and-back-part-2\/","og_locale":"pt_BR","og_type":"article","og_title":"From N1QL to JavaScript and Back - Part 2: Basic Usage","og_description":"In the previous blog introduced to you new features in JavaScript user-defined functions. We are now going to explore them in more detail. Learn more.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/from-n1ql-to-javascript-and-back-part-2\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-07-26T15:37:35+00:00","article_modified_time":"2025-06-14T00:20:45+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg","type":"image\/jpeg"}],"author":"Marco Greco, Software Architect, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marco Greco, Software Architect, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/"},"author":{"name":"Marco Greco, Software Architect, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2b5184a7cdb443ff2897aff0866cd6fd"},"headline":"From N1QL to JavaScript and Back &#8211; Part 2: Basic Usage","datePublished":"2022-07-26T15:37:35+00:00","dateModified":"2025-06-14T00:20:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/"},"wordCount":714,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg","keywords":["functions","javascript","User Defined Function (UDF)"],"articleSection":["Couchbase Server","JavaScript","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/","url":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/","name":"N1QL in JavaScript & N1QL() Function (Part 2: Basic Usage)","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg","datePublished":"2022-07-26T15:37:35+00:00","dateModified":"2025-06-14T00:20:45+00:00","description":"No blog anterior, apresentamos os novos recursos das fun\u00e7\u00f5es definidas pelo usu\u00e1rio do JavaScript. Agora vamos explor\u00e1-los em mais detalhes. Saiba mais.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/denormalization-guide-data-import-rdbms-tables-couchbase-n1ql-queries.jpg","width":1200,"height":628,"caption":"Learn how to import and denormalize your data from a relational database into Couchbase using N1QL"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/from-n1ql-to-javascript-and-back-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"From N1QL to JavaScript and Back &#8211; Part 2: Basic Usage"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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\/2b5184a7cdb443ff2897aff0866cd6fd","name":"Marco Greco, arquiteto de software, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/707c967b795fd71b6330f6d3118cf308","url":"https:\/\/secure.gravatar.com\/avatar\/e6be0ee56851d2f71a554731d5edd5c820069680f0a810b47f094091c58bc553?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6be0ee56851d2f71a554731d5edd5c820069680f0a810b47f094091c58bc553?s=96&d=mm&r=g","caption":"Marco Greco, Software Architect, Couchbase"},"description":"In a previous life, Marco used to be CTO, radiation physicist, software architect, sysadmin, DBA, trainer and general handyman at Italy's largest radiation theraphy practice. Having switched career and country, he spent more than two decades in various support and development positions in Informix first and IBM later, before finally taking the plunge and joining Couchbase, to help them make gold out of N1QL. He holds several patents and has authored open source projects of his own.","sameAs":["https:\/\/github.com\/marcogrecopriolo","https:\/\/www.linkedin.com\/in\/marco-greco-7665308\/"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/marcocouchbase-com\/"}]}},"authors":[{"term_id":8924,"user_id":1782,"is_guest":0,"slug":"marcocouchbase-com","display_name":"Marco Greco, Software Architect, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/e6be0ee56851d2f71a554731d5edd5c820069680f0a810b47f094091c58bc553?s=96&d=mm&r=g","author_category":"","last_name":"Greco","first_name":"Marco","job_title":"","user_url":"","description":"Em uma vida anterior, Marco foi CTO, f\u00edsico de radia\u00e7\u00e3o, arquiteto de software, administrador de sistemas, DBA, instrutor e faz-tudo na maior cl\u00ednica de radioterapia da It\u00e1lia.\r\n\r\nDepois de mudar de carreira e de pa\u00eds, ele passou mais de duas d\u00e9cadas em v\u00e1rios cargos de suporte e desenvolvimento na Informix, primeiro, e na IBM, depois, antes de finalmente mergulhar de cabe\u00e7a e entrar para a Couchbase, para ajud\u00e1-los a fazer do N1QL um ouro.\r\n\r\nEle \u00e9 detentor de v\u00e1rias patentes e \u00e9 autor de seus pr\u00f3prios projetos de c\u00f3digo aberto."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/13596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1782"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=13596"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/13596\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12241"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=13596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=13596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=13596"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=13596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}