{"id":3968,"date":"2017-08-25T01:09:33","date_gmt":"2017-08-25T08:09:33","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3968"},"modified":"2025-06-13T17:23:17","modified_gmt":"2025-06-14T00:23:17","slug":"paging-data-queries-with-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/paging-data-queries-with-n1ql\/","title":{"rendered":"Consultas de dados de pagina\u00e7\u00e3o com N1QL"},"content":{"rendered":"<p><em>M. David Allen \u00e9 um engenheiro de software full-stack e empres\u00e1rio que, h\u00e1 mais de uma d\u00e9cada, trabalha com praticamente todas as linguagens de programa\u00e7\u00e3o e tipos diferentes de sistemas de banco de dados que pode utilizar.  David trabalhou anteriormente em v\u00e1rios setores, incluindo finan\u00e7as, sa\u00fade e governo, concentrando-se normalmente em desafios de integra\u00e7\u00e3o de dados em grande escala, transi\u00e7\u00e3o de pesquisa aplicada e inova\u00e7\u00e3o tecnol\u00f3gica.  Ele tem mestrado pela Virginia Commonwealth University, mas desde que deixou a educa\u00e7\u00e3o formal continua sendo um estudante permanente de tecnologia.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5662\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/09\/Simple-Small-Headshot-450x300-compressed-300x200.png\" alt=\"\" width=\"410\" height=\"273\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed-300x200.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed-400x267.png 400w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed.png 450w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed-20x13.png 20w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/p>\n<h2>Configura\u00e7\u00e3o<\/h2>\n<p>Para este tutorial, usaremos o <u><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.1\/developer-guide\/sample-bucket-beer.html\" target=\"_blank\" rel=\"noopener noreferrer\">conjunto de dados de amostras de cerveja<\/a><\/u>\u00a0que vem com o Couchbase, de modo que ser\u00e1 f\u00e1cil acompanhar o processo.   Se voc\u00ea ainda n\u00e3o tiver o Couchbase instalado, poder\u00e1 come\u00e7ar rapidamente com o docker e o <u><a href=\"https:\/\/hub.docker.com\/_\/couchbase\/\" target=\"_blank\" rel=\"noopener noreferrer\">seguindo as instru\u00e7\u00f5es simples na p\u00e1gina da imagem do docker do couchbase<\/a><\/u>\u00a0para configurar uma inst\u00e2ncia r\u00e1pida do Couchbase para testes.    Basta executar o comando docker run -d -name db -p 8091-8094:8091-8094 -p 11210:11210 Couchbase com o Couchbase instalado para come\u00e7armos.   Depois de seguir alguns prompts de configura\u00e7\u00e3o descritos nessa p\u00e1gina, estamos prontos para trabalhar com alguns dados.<\/p>\n<h2>Casos de uso - O que \u00e9 pagina\u00e7\u00e3o e por que us\u00e1-la?<\/h2>\n<p>Vamos considerar uma necessidade muito comum: em nosso hipot\u00e9tico aplicativo front-end de cerveja, queremos mostrar aos nossos usu\u00e1rios uma tabela de cervejas e permitir que eles avaliem cada uma delas.  O problema \u00e9 que o banco de dados tem mais de 5.000 cervejas.  Seria um desperd\u00edcio enviar todo o conjunto de dados para o navegador todas as vezes, o que tornaria o carregamento da p\u00e1gina do seu aplicativo Web muito lento.<\/p>\n<p>Muito melhor seria mostrar ao usu\u00e1rio apenas as primeiras 10 cervejas.  Ent\u00e3o, ao clicar em um bot\u00e3o \"Next\" (Pr\u00f3ximo) para ir para a pr\u00f3xima p\u00e1gina ou, melhor ainda, ao usar um plug-in de rolagem infinita (como o <u><a href=\"https:\/\/sroze.github.io\/ngInfiniteScroll\/\" target=\"_blank\" rel=\"noopener noreferrer\">ngInfiniteScroll<\/a><\/u>\u00a0para angular ou<u><a href=\"https:\/\/github.com\/seatgeek\/react-infinite\" target=\"_blank\" rel=\"noopener noreferrer\">\u00a0react-infinite<\/a><\/u>\u00a0para reagir), o usu\u00e1rio pode ver progressivamente mais registros do banco de dados.<\/p>\n<h2>Mostre-me o c\u00f3digo!<\/h2>\n<pre class=\"lang:default decode:true\">SELECT name, category, abv from `beer-sample`\r\n\r\nWHERE brewery_id is not missing\r\n\r\nORDER BY name\r\n\r\nOFFSET 0\r\n\r\nLIMIT 10;<\/pre>\n<p>Isso retorna os dados que voc\u00ea espera:<\/p>\n<pre class=\"lang:default decode:true\">[\r\n\r\n\u00a0 {\r\n\r\n\u00a0 \u00a0 \"abv\": 0,\r\n\r\n\u00a0 \u00a0 \"category\": \"North American Lager\",\r\n\r\n\u00a0 \u00a0 \"name\": \"#17 Cream Ale\"\r\n\r\n\u00a0 },\r\n\r\n\u00a0 {\r\n\r\n\u00a0 \u00a0 \"abv\": 0,\r\n\r\n\u00a0 \u00a0 \"name\": \"#40 Golden Lager\"\r\n\r\n\u00a0 },\r\n\r\n\u00a0 {\r\n\r\n\u00a0 \u00a0 \"abv\": 0,\r\n\r\n\u00a0 \u00a0 \"category\": \"Other Style\",\r\n\r\n\u00a0 \u00a0 \"name\": \"#42 Cream Ale\"\r\n\r\n\u00a0 },\r\n\r\n\u00a0 \/* (...) *\/\r\n\r\n<\/pre>\n<p>Para obter a segunda p\u00e1gina de resultados, voc\u00ea s\u00f3 precisa adicionar o LIMIT ao OFFSET.    Por exemplo, OFFSET 10 LIMIT 10 seria a segunda p\u00e1gina.   Para generalizar, quantos registros devem ser ignorados com o OFFSET para chegar \u00e0 en\u00e9sima p\u00e1gina?    Ser\u00e1 sempre n * tamanho da p\u00e1gina.<\/p>\n<p>Usando essa matem\u00e1tica simples, podemos generalizar isso para qualquer cen\u00e1rio.  E se quis\u00e9ssemos mostrar 20 resultados por vez e o usu\u00e1rio quisesse ir direto para a 11\u00aa p\u00e1gina?   Sem problemas, \u00e9 s\u00f3 LIMIT 20 OFFSET 20 * 11.   Assim, os pontos de extremidade do aplicativo, quer estejam pesquisando o banco de dados ou apenas listando as cervejas por nome, podem usar exatamente a mesma l\u00f3gica de consulta todas as vezes.  N\u00e3o importa a complexidade da consulta, basta ajustar LIMIT e OFFSET e estaremos todos na mesma p\u00e1gina.<\/p>\n<h2>Como isso funciona?<\/h2>\n<p>A m\u00e1gica aqui \u00e9 a combina\u00e7\u00e3o de tr\u00eas cl\u00e1usulas N1QL: \u00a0<strong>LIMITE<\/strong>, <strong>DESLOCAMENTO<\/strong>e <strong>ORDER BY<\/strong>.   Vamos dar uma olhada r\u00e1pida em cada um deles, pois todos s\u00e3o necess\u00e1rios para realizar o trabalho.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/limit.html\" target=\"_blank\" rel=\"noopener noreferrer\">LIMITE<\/a><\/strong>\u00a0faz exatamente o que diz. Ele limita quantos registros o Couchbase retornar\u00e1 e efetivamente imp\u00f5e o tamanho da nossa p\u00e1gina (queremos apenas 10 cervejas por vez, nunca 5.000)<\/li>\n<li><strong><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/offset.html\" target=\"_blank\" rel=\"noopener noreferrer\">DESLOCAMENTO<\/a><\/strong>\u00a0informa ao Couchbase quantos registros devem ser pulados antes de come\u00e7ar a retornar os documentos. Se voc\u00ea estiver familiarizado com SQL, ela se comporta exatamente como SKIP no SQL. A cl\u00e1usula OFFSET \u00e9 como avan\u00e7amos por todo o conjunto de dados, um peda\u00e7o de cada vez.<\/li>\n<li><strong><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/orderby.html\" target=\"_blank\" rel=\"noopener noreferrer\">ORDER BY<\/a><\/strong>\u00a0garante uma determinada ordem retornada pelo banco de dados. Isso \u00e9 importante porque o Couchbase n\u00e3o garante nenhuma ordem espec\u00edfica dos resultados, a menos que voc\u00ea a solicite.  Em nossa consulta anterior, a Cream Ale #17 apareceu como o primeiro resultado ao ordenar por nome. Se n\u00e3o us\u00e1ssemos ORDER BY, n\u00e3o poder\u00edamos prever em que parte do conjunto o #17 Cream Ale apareceria, e \u00e9 poss\u00edvel que ele aparecesse em mais de uma p\u00e1gina, dependendo de como o Couchbase executou a consulta!<\/li>\n<\/ul>\n<p>Em termos simples, imagine o Couchbase criando uma lista de todas as cervejas ordenadas por nome (ORDER BY).  A pagina\u00e7\u00e3o est\u00e1 apenas pegando lotes de 10 delas (LIMIT 10).   Cada p\u00e1gina come\u00e7a pulando toda a lista ordenada at\u00e9 o ponto de partida da pr\u00f3xima p\u00e1gina (OFFSET).<\/p>\n<h2>EXPLIQUE-SE, Couchbase.<\/h2>\n<p>Um exemplo final: como em qualquer consulta N1QL, voc\u00ea pode obter muitas informa\u00e7\u00f5es sobre como ela funciona simplesmente colocando \"EXPLAIN\" na frente dela.  Isso diz ao Couchbase para informar o que ele est\u00e1 planejando fazer.<\/p>\n<pre class=\"lang:default decode:true\">EXPLAIN SELECT name, category, abv from `beer-sample`\r\n\r\nWHERE brewery_id is not missing\r\n\r\nORDER BY name\r\n\r\nOFFSET 0\r\n\r\nLIMIT 10;\r\n\r\n<\/pre>\n<p>(Experimente voc\u00ea mesmo essa consulta!) O resultado \u00e9 bastante longo, portanto n\u00e3o vamos col\u00e1-lo aqui, mas vamos resumir o que o Couchbase est\u00e1 fazendo com essa consulta.<\/p>\n<ol>\n<li>Primeiro, ele faz uma varredura prim\u00e1ria do balde de amostras de cerveja e busca documentos.<\/li>\n<li>Em paralelo, ele filtra para:\n<ol>\n<li>Registros que t\u00eam um brewery_id (isso nos diz que o registro \u00e9 uma cerveja, n\u00e3o um documento da cervejaria)<\/li>\n<li>Ele projeta o nome, a categoria e as propriedades de teor alco\u00f3lico (o que pedimos)<\/li>\n<\/ol>\n<\/li>\n<li>Em seguida, ele ordena os resultados por nome<\/li>\n<li>O deslocamento \u00e9 aplicado em seguida, pulando efetivamente os primeiros X registros e n\u00e3o os retornando de forma alguma.<\/li>\n<li>Por fim, ele aplica o LIMIT lendo os pr\u00f3ximos n registros e ignorando todos os posteriores.<\/li>\n<\/ol>\n<h2>Quando terminamos?<\/h2>\n<p>Se estivermos percorrendo nossos dados uma p\u00e1gina de cada vez, tamb\u00e9m precisaremos saber quando parar.  H\u00e1 duas maneiras de abordar isso: por um lado, se continuarmos avan\u00e7ando indefinidamente pelas p\u00e1ginas, acabaremos ficando sem dados.   Por outro lado, voc\u00ea poderia simplesmente pr\u00e9-computar quantas p\u00e1ginas est\u00e3o presentes e, em seguida, iterar por elas at\u00e9 atingir esse n\u00famero.<\/p>\n<p>O que acontece se solicitarmos a s\u00e9tima p\u00e1gina de 1.000 resultados, sabendo muito bem que n\u00e3o h\u00e1 nenhum conjunto de documentos desse tipo?<\/p>\n<pre class=\"lang:default decode:true\">SELECT name, category, abv from `beer-sample`\r\n\r\nWHERE brewery_id is not missing\r\n\r\nORDER BY name\r\n\r\nOFFSET 7 * 1000\r\n\r\nLIMIT 1000;\r\n\r\n<\/pre>\n<p>Bem, n\u00e3o se preocupe - se voc\u00ea passar do final, obter\u00e1 apenas uma matriz vazia.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n\r\n\u00a0 \"results\": [],\r\n\r\n\u00a0 \"metrics\": {\r\n\r\n\u00a0 \u00a0 \"elapsedTime\": \"465.446327ms\",\r\n\r\n\u00a0 \u00a0 \"executionTime\": \"465.384101ms\",\r\n\r\n\u00a0 \u00a0 \"resultCount\": 0,\r\n\r\n\u00a0 \u00a0 \"resultSize\": 0,\r\n\r\n\u00a0 \u00a0 \"sortCount\": 5891\r\n\r\n\u00a0 }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Para fins de registro, a matriz vazia tamb\u00e9m \u00e9 o que voc\u00ea obter\u00e1 se pedir algo sem sentido, como:<\/p>\n<pre class=\"lang:default decode:true\">SELECT name, category, abv from `beer-sample`\r\n\r\nWHERE brewery_id is not missing\r\n\r\nORDER BY name\r\n\r\nOFFSET -5\r\n\r\nLIMIT -10;\r\n\r\n<\/pre>\n<p>Wait....what?!?!  Essa consulta est\u00e1 pedindo para iniciar 5 registros antes do in\u00edcio do conjunto de sa\u00edda e retornar n\u00e3o mais do que -10 registros.  5 registros antes do in\u00edcio n\u00e3o \u00e9 nada.  E n\u00e3o mais do que -10 registros n\u00e3o \u00e9 nada.   Portanto, voc\u00ea obt\u00e9m....nothing!<\/p>\n<p>Esse comportamento \u00e9 muito conveniente; fica claro quando n\u00e3o h\u00e1 mais registros e tamb\u00e9m funciona bem com v\u00e1rias outras suposi\u00e7\u00f5es em diferentes camadas de software. Se voc\u00ea j\u00e1 usou APIs REST compat\u00edveis com pagina\u00e7\u00e3o, geralmente \u00e9 assim que elas funcionam. Por exemplo, voc\u00ea pode facilmente imaginar um ponto de extremidade da API REST com a seguinte apar\u00eancia: https:\/\/cool-app.com\/beers?limit=10&amp;page=6000.   Se voc\u00ea escreveu esse endpoint no seu back-end, pode ver facilmente como ele geraria uma consulta N1QL correspondente e, mesmo que o usu\u00e1rio fornecesse um n\u00famero de p\u00e1gina diferente, seu endpoint faria a coisa certa.<\/p>\n<h2>Mas e se eu quiser saber com anteced\u00eancia quantas p\u00e1ginas haver\u00e1?<\/h2>\n<p>Isso tamb\u00e9m \u00e9 simples.  Se soubermos que cada p\u00e1gina tem n registros e soubermos o n\u00famero total de registros, poderemos dividir o total por n, pegar o teto desse n\u00famero e isso nos dir\u00e1 quantas p\u00e1ginas em potencial existem no Couchbase.<\/p>\n<pre class=\"lang:default decode:true\">SELECT CEIL(count(*) \/ 10) from `beer-sample`\r\n\r\nWHERE brewery_id is not missing\r\n\r\n<\/pre>\n<p>Isso resulta no meu banco de dados local 590. Como h\u00e1 exatamente 5.891 documentos sobre cerveja, isso significa que haver\u00e1 589 conjuntos de 10, e a p\u00e1gina final ter\u00e1 apenas 1 documento. Como 5.891 \/ 10 = 589,1, usamos o N1QL\u00a0<u><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/numericfun.html\" target=\"_blank\" rel=\"noopener noreferrer\">Fun\u00e7\u00e3o CEIL<\/a><\/u>\u00a0para obter um n\u00famero inteiro de p\u00e1ginas, pois qualquer aplicativo front-end n\u00e3o exibir\u00e1 0,1 de uma p\u00e1gina.<\/p>\n<p>Lembre-se de que ainda precisamos da cl\u00e1usula WHERE aqui, para reduzir os documentos a apenas documentos sobre cerveja, excluindo cervejarias e outros documentos.  Se a cl\u00e1usula WHERE estivesse faltando, voc\u00ea obteria o n\u00famero errado, com certeza.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/community\/community-writers-program\/\"><em>Esta postagem faz parte do Programa de Reda\u00e7\u00e3o da Comunidade Couchbase<\/em><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>M. David Allen is a full-stack software engineer and entrepreneur who for more than a decade has been working with just about every different programming language and different type of database system he could get his hands on. \u00a0David has [&hellip;]<\/p>","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1812],"tags":[2044],"ppma_author":[9026],"class_list":["post-3968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-n1ql-query","tag-paging"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.4 (Yoast SEO v26.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Paging Data Queries with N1QL - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Dive into paging data queries with N1QL. Guest author David Allen shows us how to use a docker instance and learn about common paging use cases.\" \/>\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\/paging-data-queries-with-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Paging Data Queries with N1QL\" \/>\n<meta property=\"og:description\" content=\"Dive into paging data queries with N1QL. Guest author David Allen shows us how to use a docker instance and learn about common paging use cases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/paging-data-queries-with-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-25T08:09:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:23:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Paging Data Queries with N1QL\",\"datePublished\":\"2017-08-25T08:09:33+00:00\",\"dateModified\":\"2025-06-14T00:23:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/\"},\"wordCount\":1325,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Paging\"],\"articleSection\":[\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/\",\"name\":\"Paging Data Queries with N1QL - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-08-25T08:09:33+00:00\",\"dateModified\":\"2025-06-14T00:23:17+00:00\",\"description\":\"Dive into paging data queries with N1QL. Guest author David Allen shows us how to use a docker instance and learn about common paging use cases.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Paging Data Queries with N1QL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"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\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Paging Data Queries with N1QL - The Couchbase Blog","description":"Mergulhe nas consultas de dados de pagina\u00e7\u00e3o com o N1QL. O autor convidado David Allen nos mostra como usar uma inst\u00e2ncia de docker e aprender sobre casos de uso comuns de pagina\u00e7\u00e3o.","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\/paging-data-queries-with-n1ql\/","og_locale":"pt_BR","og_type":"article","og_title":"Paging Data Queries with N1QL","og_description":"Dive into paging data queries with N1QL. Guest author David Allen shows us how to use a docker instance and learn about common paging use cases.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/paging-data-queries-with-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-08-25T08:09:33+00:00","article_modified_time":"2025-06-14T00:23:17+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/09\/Simple-Small-Headshot-450x300-compressed.png","type":"image\/png"}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Paging Data Queries with N1QL","datePublished":"2017-08-25T08:09:33+00:00","dateModified":"2025-06-14T00:23:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/"},"wordCount":1325,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Paging"],"articleSection":["Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/","name":"Paging Data Queries with N1QL - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-08-25T08:09:33+00:00","dateModified":"2025-06-14T00:23:17+00:00","description":"Mergulhe nas consultas de dados de pagina\u00e7\u00e3o com o N1QL. O autor convidado David Allen nos mostra como usar uma inst\u00e2ncia de docker e aprender sobre casos de uso comuns de pagina\u00e7\u00e3o.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/paging-data-queries-with-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Paging Data Queries with N1QL"}]},{"@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\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/"}]}},"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","author_category":"","last_name":"Czajkowski","first_name":"Laura","job_title":"","user_url":"","description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3968","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\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3968"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=3968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3968"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}