{"id":4410,"date":"2018-01-03T10:28:26","date_gmt":"2018-01-03T18:28:26","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4410"},"modified":"2025-06-13T20:09:25","modified_gmt":"2025-06-14T03:09:25","slug":"querying-array-collections-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/querying-array-collections-couchbase-mobile\/","title":{"rendered":"Como consultar cole\u00e7\u00f5es de matrizes no Couchbase Lite"},"content":{"rendered":"<p>Um dos principais recursos introduzidos no <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">Couchbase Lite 2.0<\/a>\u00e9 a nova interface de consulta baseada em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a>a linguagem de consulta declarativa do Couchbase que estende o SQL para JSON. Se voc\u00ea estiver familiarizado com SQL, vai se sentir em casa com a sem\u00e2ntica da nova API. Cobrimos os conceitos b\u00e1sicos da interface em um artigo anterior <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">postagem no blog<\/a>. As matrizes s\u00e3o um componente integral da modelagem de dados com JSON. Nesta postagem do blog, discutiremos a consulta de cole\u00e7\u00f5es de matrizes usando a nova API.<\/p>\n<p>Este blog pressup\u00f5e que voc\u00ea esteja familiarizado com os fundamentos, portanto, se ainda n\u00e3o o fez, n\u00e3o deixe de revisar o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">postagem anterior<\/a> primeiro. A \u00faltima se\u00e7\u00e3o do post lista links para outros blogs de consulta relevantes.<\/p>\n<div>Voc\u00ea pode fazer o download das compila\u00e7\u00f5es de pr\u00e9-lan\u00e7amento do Couchbase Mobile 2.0 em nosso <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">downloads<\/a>\u00a0p\u00e1gina.<\/div>\n<div><\/div>\n<p><!--more--><\/p>\n<h3 id=\"background\">Hist\u00f3rico<\/h3>\n<p>Se voc\u00ea estava usando as vers\u00f5es 1.x do Couchbase Mobile, provavelmente est\u00e1 familiarizado com <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/training\/develop\/using-the-database\/index.html#query-documents\">Visualiza\u00e7\u00f5es de mapas<\/a> para criar \u00edndices e consultas. Na vers\u00e3o 2.0, voc\u00ea n\u00e3o precisa mais criar visualiza\u00e7\u00f5es e fun\u00e7\u00f5es de mapa! Em vez disso, uma interface simples permite a cria\u00e7\u00e3o de \u00edndices e voc\u00ea pode usar uma interface do Query Builder para construir suas consultas. A nova interface de consulta \u00e9 mais simples de usar e muito mais poderosa em compara\u00e7\u00e3o. Vamos descobrir alguns de seus recursos nesta postagem.<\/p>\n<h3 id=\"sampleproject\">Projeto de amostra<\/h3>\n<p>Embora os exemplos discutidos aqui usem o Swift para iOS, observe que, salvo algumas pequenas diferen\u00e7as, a mesma interface de consulta tamb\u00e9m \u00e9 compat\u00edvel com as plataformas Android e Windows. Portanto, com alguns pequenos ajustes, voc\u00ea poder\u00e1 reutilizar os exemplos de consulta desta publica\u00e7\u00e3o ao trabalhar com outras plataformas.<\/p>\n<p>Siga as instru\u00e7\u00f5es abaixo se voc\u00ea estiver interessado em um projeto Swift de amostra<\/p>\n<ul>\n<li>Clone o iOS Swift Playground do GitHub<\/li>\n<\/ul>\n<pre><code>$ git clone https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground<\/code><\/pre>\n<ul>\n<li>Siga as instru\u00e7\u00f5es de instala\u00e7\u00e3o no manual correspondente <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/blob\/master\/README.md\">LEIAME<\/a> para criar e executar o playground.<\/li>\n<\/ul>\n<h3 id=\"sampledatamodel\">Modelo de dados de amostra<\/h3>\n<p>Usaremos o banco de dados Travel Sample localizado <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/tree\/master\/travel-sample.cblite2\">aqui<\/a><\/p>\n<p>O conjunto de dados de amostra inclui v\u00e1rios tipos de documentos, conforme identificado pelo <code>tipo<\/code> no documento. Vamos nos concentrar em documentos de <code>tipo<\/code> <em>\"hotel\"<\/em> . O modelo de documento JSON \u00e9 mostrado abaixo. Para fins de brevidade, omitimos algumas das propriedades do modelo abaixo.<\/p>\n<p>Especificamente, observe que o modelo inclui cole\u00e7\u00f5es aninhadas - <code>public_likes<\/code> e <code>revis\u00f5es<\/code>. As consultas nas se\u00e7\u00f5es seguintes lidar\u00e3o com essas cole\u00e7\u00f5es aninhadas.<\/p>\n<pre><code> {\r\n \"type\": \"hotel\",\r\n \"name\": \"Medway Youth Hostel\",\r\n \"address\": \"Capstone Road, ME7 3JE\",\r\n \"city\": \"Medway\",\r\n \"country\": \"United Kingdom\",\r\n \"description\": \"blah blah\",\r\n \"public_likes\": [\r\n \"Julius Tromp I\",\r\n \"Corrine Hilll\"\r\n ],\r\n \"reviews\": [\r\n {\r\n \"author\": \"Ozella Sipes\",\r\n \"content\": \"blah blah.\",\r\n \"date\": \"2013\u201306\u201322 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 5,\r\n \"Location\": 4,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n },\r\n {\r\n \"author\": \"Jeremy Snapes\",\r\n \"content\": \"blah blah.\",\r\n \"date\": \"2013\u201305\u201305 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 2,\r\n \"Location\": 2,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n }\r\n ],\r\n  \"url\":\"https:\/\/www.yha.org.uk\",\r\n    \"vacancy\": true\r\n    }<\/code><\/pre>\n<p>** Consulte o modelo acima para cada um dos exemplos de consulta abaixo. **<\/p>\n<h3 id=\"thedatabasehandle\">O identificador do banco de dados<\/h3>\n<p>Nas consultas abaixo, usaremos o <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/guides\/couchbase-lite\/native-api\/database\/index.html\"><code>Banco de dados<\/code><\/a> API para abrir\/criar o banco de dados CouchbaseLite.<\/p>\n<pre><code> var options = DatabaseConfiguration()\r\n let db = try Database(name: kDBName, config: options)<\/code><\/pre>\n<h3 id=\"indexes\">\u00cdndices<\/h3>\n<p>Para acelerar as consultas de leitura, voc\u00ea pode criar \u00edndices nas propriedades que ser\u00e3o consultadas. A melhoria no desempenho seria significativa em grandes conjuntos de dados. Obviamente, esteja ciente de que haver\u00e1 um aumento na necessidade de armazenamento para guardar os \u00edndices, e o desempenho das grava\u00e7\u00f5es tamb\u00e9m poder\u00e1 ser afetado. Portanto, tenha cuidado ao criar muitos \u00edndices.<\/p>\n<p>O exemplo a seguir cria um <code>\u00cdndice de valor<\/code> no <code>tipo<\/code> propriedade de um documento<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> try db.createIndex(IndexBuilder.valueIndex(items: ValueIndexItem.property(\"type\")),withName: \"typeIndex\")<\/pre>\n<p>O exemplo a seguir cria um <code>\u00cdndice de valor<\/code> em <code>tipo<\/code> e <code>nome<\/code> propriedades de um documento<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">try db.createIndex(IndexBuilder.valueIndex(items: ValueIndexItem.property(\"type\"),ValueIndexItem.property(\"name\")),withName: \"TypeNameIndex\")<\/pre>\n<h3 id=\"arraycontainment\">Conten\u00e7\u00e3o de matrizes<\/h3>\n<p>A consulta abaixo busca o <em>IDs<\/em>, <em>nomes<\/em> e <em>public_likes<\/em> propriedades de documentos em que o <code>public_likes<\/code> propriedade de matriz em <em>\"hotel\"<\/em> <code>tipo<\/code> cont\u00e9m o valor de <em>\"Corrine Hilll\"<\/em>. Para isso, o <code>**ArrayFunction.contains**<\/code> \u00e9 usada na express\u00e3o da fun\u00e7\u00e3o <code>public_likes<\/code> matriz.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">let searchQuery = QueryBuilde.select(SelectResult.expression(Meta.id),\r\n                  SelectResult.expression(Expression.property(\"name\")),\r\n                  SelectResult.expression(Expression.property(\"public_likes\")))\r\n .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n .and( ArrayFunction.contains(Expression.property(\"public_likes\"), value: Expression.string(\"Corrine Hilll\"))))<\/pre>\n<h3 id=\"arraysize\">Tamanho da matriz<\/h3>\n<p>A consulta abaixo busca o <em>IDs<\/em>, <em>nomes<\/em> e as propriedades <strong>tamanho<\/strong> de <em>public_likes<\/em> propriedade de matriz em <em>\"hotel\"<\/em> <code>tipo<\/code> documentos. Para isso, o <code>**ArrayFunction.length**<\/code> \u00e9 usada na express\u00e3o da fun\u00e7\u00e3o <code>public_likes<\/code> para obter o tamanho da matriz.<\/p>\n<p>Al\u00e9m disso, observe que estamos usando <code>como<\/code> express\u00e3o para <em>pseud\u00f4nimo<\/em> o valor de contagem da matriz para <em>NumLikes<\/em>. N\u00f3s apresentamos <em>aliases<\/em> na postagem anterior do blog sobre Fundamentos da consulta. Se voc\u00ea n\u00e3o colocar um alias no resultado do <code>arrayLength<\/code> a chave da propriedade seria <code>$1<\/code> o que n\u00e3o \u00e9 muito intuitivo.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n           SelectResult.expression(Expression.property(\"name\")),\r\n           SelectResult.expression(ArrayFunction.length(Expression.property(\"public_likes\"))).as(\"NumLikes\"))\r\n .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\")))\r\n .limit(Expression.int(limit))<\/pre>\n<h3 id=\"evaluatingarraymembers\">Avalia\u00e7\u00e3o de membros da matriz<\/h3>\n<p>Enquanto o <code>ArrayFunction.contains<\/code> permite que voc\u00ea verifique se a matriz dada cont\u00e9m um valor espec\u00edfico, a express\u00e3o da fun\u00e7\u00e3o <code>em<\/code> pode ser usada para avaliar qualquer um ou todos os membros de uma matriz em rela\u00e7\u00e3o a um crit\u00e9rio especificado pela express\u00e3o de matriz <code>satisfaz<\/code> express\u00e3o. Esse \u00e9 um recurso avan\u00e7ado de filtragem de documentos.<\/p>\n<p>O<code>em<\/code>\u00e9 usada com a express\u00e3o <code>qualquer<\/code>, <code>todos<\/code> ou o <code>anyAndEvery<\/code> operadores quantificados em <code>Express\u00e3o de matriz<\/code> para avaliar qualquer, todo ou qualquer\/todo elemento no objeto de matriz.<\/p>\n<p>A consulta a seguir retorna os documentos em que <code>qualquer<\/code> dos valores no <code>public_likes<\/code> O array come\u00e7a com os caracteres \"Corr\".<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">\/\/1.\r\n let VAR_LIKEDBY = ArrayExpression.variable(\"likedby\")\r\n \r\n\/\/2.\r\n let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n                  SelectResult.expression((Expression.property(\"public_likes\"))))\r\n.from(DataSource.database(db))\r\n.where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n.and(ArrayExpression.any(VAR_LIKEDBY).in(Expression.property(\"public_likes\"))\r\n.satisfies(VAR_LIKEDBY.like(Expression.string(\"Cor%\")))))\r\n.limit(Expression.int(limit))<code><\/code><\/pre>\n<ol>\n<li style=\"list-style-type: none\">\n<ol>\n<li>Declare uma vari\u00e1vel com o nome \"likedby\" para representar cada elemento no <code>public_likes<\/code> matriz<\/li>\n<li>O <code>qualquer<\/code> ArrayExpression verifica se o elemento da matriz representado pelo <code>apreciado por<\/code> satisfaz os crit\u00e9rios da vari\u00e1vel <code>como<\/code> express\u00e3o. A <code>como<\/code> verifica se o valor do item representado pela vari\u00e1vel \"likedby\" come\u00e7a com \"Cor\".<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"indexingarrays\">Matrizes de indexa\u00e7\u00e3o<\/h3>\n<p>Voc\u00ea tamb\u00e9m pode consultar elementos em \u00edndices espec\u00edficos. A consulta a seguir retorna o <code>nome<\/code> e primeiro membro da <code>public_likes<\/code> propriedades de matriz de todos os documentos \"hotel<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n           SelectResult.expression(Expression.property(\"name\")),\r\n           SelectResult.expression(Expression.property(\"public_likes[0]\")))\r\n .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\")))\r\n .limit(Expression.int(limit))<\/pre>\n<h3 id=\"evaluatingnestedarrays\">Avalia\u00e7\u00e3o de matrizes aninhadas<\/h3>\n<p>Voc\u00ea pode avaliar os membros de uma matriz aninhada. Para isso, voc\u00ea pode aplicar um <code>caminho das teclas<\/code> para a express\u00e3o da vari\u00e1vel. A matriz aninhada deve ter um n\u00edvel de profundidade.<\/p>\n<p>A consulta a seguir retorna os documentos em que <code>qualquer<\/code> dos valores na tabela aninhada <code>classifica\u00e7\u00f5es<\/code> tem a matriz <code>Geral<\/code> classifica\u00e7\u00e3o de propriedade maior ou igual a 4.<br \/>\nComo voc\u00ea deve ter notado no modelo de dados acima, a propriedade \"reviews\" cont\u00e9m uma matriz de objetos. Cada um dos objetos cont\u00e9m um objeto <code>classifica\u00e7\u00f5es<\/code> que, por sua vez, cont\u00e9m o array <code>Geral<\/code> propriedade.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">\/\/ 1.\r\n let VAR_OVERALL = ArrayExpression.variable(\"review.ratings.Overall\")\r\n \/\/2.\r\n let VAR_REVIEWS = ArrayExpression.variable(\"review\")\r\n \/\/3.\r\n let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n          SelectResult.expression(Expression.property(\"name\")))\r\n .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n .and(ArrayExpression.any(VAR_REVIEWS).in(Expression.property(\"reviews\"))\r\n .satisfies(VAR_OVERALL.greaterThanOrEqualTo(Expression.int(4)))))\r\n .limit(Expression.int(limit))<\/pre>\n<ol>\n<li>Declare uma vari\u00e1vel para representar um elemento no <code>revis\u00e3o.classifica\u00e7\u00f5es.geral<\/code> matriz<\/li>\n<li>Declare uma vari\u00e1vel para representar cada elemento no <code>revis\u00f5es<\/code> matriz<\/li>\n<li>O <code>qualquer<\/code> verifica se o elemento da matriz representado pela express\u00e3o <code>revis\u00e3o<\/code> satisfaz os crit\u00e9rios da vari\u00e1vel <code>compara\u00e7\u00e3o<\/code> express\u00e3o. A <code>compara\u00e7\u00e3o<\/code> verifica o valor de <code>Geral<\/code> propriedade do <code>classifica\u00e7\u00f5es<\/code> no objeto representado pela vari\u00e1vel \"review\" \u00e9 maior ou igual a 4.<\/li>\n<\/ol>\n<h3 id=\"limitations\">Limita\u00e7\u00f5es<\/h3>\n<p>Os recursos de manipula\u00e7\u00e3o de matriz n\u00e3o s\u00e3o t\u00e3o extensos quanto os do N1QL <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.0\/n1ql\/n1ql-language-reference\/arrayfun.html\">conjunto de recursos<\/a>. Mas \u00e9 um bom ponto de partida. Esses recursos poder\u00e3o estar dispon\u00edveis em vers\u00f5es futuras do Couchbase Mobile.<\/p>\n<p>Portanto, por enquanto, cabe ao aplicativo manipular os resultados da matriz usando os recursos de processamento de cole\u00e7\u00e3o da linguagem.<\/p>\n<p>Vamos considerar este exemplo em swift<\/p>\n<ul>\n<li>Com rela\u00e7\u00e3o ao modelo de dados, digamos que voc\u00ea queira determinar o <em>m\u00ednimo<\/em> <code>Limpeza<\/code> classifica\u00e7\u00e3o para um determinado hotel com base nas avalia\u00e7\u00f5es sobre o hotel.<\/li>\n<\/ul>\n<p>Com base no modelo acima, observe que o <code>Limpeza<\/code> \u00e9 um membro da propriedade <code>classifica\u00e7\u00f5es<\/code> contida em cada objeto que \u00e9 membro de <code>revis\u00f5es<\/code> matriz.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/12\/array_model_1.png\" alt=\"\" \/><\/figure>\n<p>Para isso, voc\u00ea pode fazer uma consulta do Couchbase Lite para buscar o <code>revis\u00f5es<\/code> propriedade de matriz para um hotel com Id especificado da seguinte forma -<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> \/\/ 1. Query for reviews property array for the given hotel\r\n let searchQuery = QueryBuilder.select( \r\n        SelectResult.expression(Expression.property(\"reviews\")))\r\n .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string(\"hotel\"))\r\n .and(Meta.id.equalTo(Expression.string(\"hotel_10025\"))))<\/pre>\n<p>O <code>resultSet<\/code> A resposta \u00e0 consulta acima seria uma matriz com um \u00fanico elemento. Esse elemento corresponderia ao documento \"hotel\" para o Id especificado.<\/p>\n<pre><code>[\r\n {\r\n \"reviews\": [\r\n {\r\n \"author\": \"Ozella Sipes\",\r\n \"content\": \"blah\",\r\n \"date\": \"2013\u201306\u201322 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 5,\r\n \"Location\": 4,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n },\r\n {\r\n \"author\": \"fuzzy Snipes\",\r\n \"content\": \"blah\",\r\n \"date\": \"2013\u201306\u201322 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 2,\r\n \"Location\": 3,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n }\r\n ]\r\n }\r\n]<\/code><\/pre>\n<p>Agora, o aplicativo precisa implementar a l\u00f3gica para iterar sobre o <code>revis\u00f5es<\/code> e para cada membro da matriz, para buscar o <code>classifica\u00e7\u00f5es<\/code> e a propriedade <code>Limpeza<\/code> valor.<\/p>\n<p>Aqui est\u00e1 uma maneira poss\u00edvel de fazer isso no swift.<\/p>\n<ul>\n<li>Primeiro, itere sobre o resultSet e extraia o valor da propriedade \"reviews\".<\/li>\n<\/ul>\n<pre class=\"wrap:true lang:swift decode:true\"> var matches:[[String:Any]] = [[String:Any]]()\r\n do {\r\n       for row in try searchQuery.execute() {\r\n          if let reviewData = row.array(forKey: \"reviews\")?.toArray() as? [[String:Any]] {\r\n          matches.append(reviewData)\r\n      }\r\n    }\r\n }<\/pre>\n<p>Ap\u00f3s o processamento do loop, a matriz \"matches\" seria algo parecido com o que est\u00e1 abaixo. Seria uma matriz contendo a matriz aninhada correspondente \u00e0s revis\u00f5es -<\/p>\n<pre><code>[\r\n [\r\n {\r\n \"author\": \"Ozella Sipes\",\r\n \"content\": \"blah\",\r\n \"date\": \"2013\u201306\u201322 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 5,\r\n \"Location\": 4,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n },\r\n {\r\n \"author\": \"fuzzy Snipes\",\r\n \"content\": \"blah\",\r\n \"date\": \"2013\u201306\u201322 18:33:50 +0300\",\r\n \"ratings\": {\r\n \"Cleanliness\": 2,\r\n \"Location\": 3,\r\n \"Overall\": 4,\r\n \"Rooms\": 3,\r\n \"Service\": 5,\r\n \"Value\": 4\r\n }\r\n }\r\n ]\r\n]\r\n<\/code><\/pre>\n<ul>\n<li>Em seguida, voc\u00ea pode usar os recursos da linguagem swift, como <code>flatMap<\/code> e <code>mapa<\/code> para processar a matriz resultante e obter a classifica\u00e7\u00e3o m\u00ednima de \"Limpeza\" para um determinado hotel<\/li>\n<\/ul>\n<pre class=\"wrap:true lang:swift decode:true\">let minCleanlinessValue = matches.flatMap{$0}\r\n .map{return ($0[\"ratings\"] as? [String:Any])?[\"Cleanliness\"] as? Int}\r\n .flatMap{$0}\r\n .min { (a, b) -&gt; Bool in\r\n      return a &lt; b\r\n }<\/pre>\n<p>Voc\u00ea faria algo semelhante em linguagens que suportam constru\u00e7\u00f5es funcionais como <code>mapa plano<\/code> e <code>mapa<\/code>.<\/p>\n<h3 id=\"whatnext\">O que vem a seguir<\/h3>\n<p>Esta postagem do blog analisou como voc\u00ea pode manipular os tipos de cole\u00e7\u00e3o Array usando a nova API de consulta no Couchbase Mobile 2.0. Isso \u00e9 um come\u00e7o. Espere ver mais funcionalidades em vers\u00f5es futuras. Voc\u00ea pode fazer o download da vers\u00e3o de pr\u00e9-lan\u00e7amento em nosso <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">downloads<\/a> p\u00e1gina.<\/p>\n<p>Aqui est\u00e3o outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">postagem no blog<\/a> discute os fundamentos da API de consulta<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/full-text-search-couchbase-mobile-2-0\/\">postagem no blog<\/a> discute os recursos de pesquisa de texto completo.<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/join-queries-couchbase-mobile\/\">postagem no blog<\/a> discute como fazer consultas JOIN<\/p>\n<p>Se tiver d\u00favidas ou coment\u00e1rios, deixe um coment\u00e1rio abaixo ou entre em contato comigo pelo Twitter\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a>\u00a0ou envie-me um e-mail\u00a0<a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.  O\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a> s\u00e3o outro bom lugar para entrar em contato com perguntas.<\/p>","protected":false},"excerpt":{"rendered":"<p>One of the major features introduced in Couchbase Lite 2.0, is the new Query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON. If you are familiar with SQL, you will feel right at home with [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":4188,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,1815,7667,1810,1812],"tags":[1536,1909],"ppma_author":[8948],"class_list":["post-4410","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-n1ql-query","tag-ios","tag-swift"],"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>Query Array Collections in Couchbase Lite Using New API<\/title>\n<meta name=\"description\" content=\"In this Couchbase blog post, we will discuss array query collections conducted using Couchbase Lite, the new API query interface based on N1QL.\" \/>\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\/querying-array-collections-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Query Array Collections in Couchbase Lite\" \/>\n<meta property=\"og:description\" content=\"In this Couchbase blog post, we will discuss array query collections conducted using Couchbase Lite, the new API query interface based on N1QL.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/querying-array-collections-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-03T18:28:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:09:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1716\" \/>\n\t<meta property=\"og:image:height\" content=\"842\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"How to Query Array Collections in Couchbase Lite\",\"datePublished\":\"2018-01-03T18:28:26+00:00\",\"dateModified\":\"2025-06-14T03:09:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/\"},\"wordCount\":1333,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"keywords\":[\"ios\",\"swift\"],\"articleSection\":[\".NET\",\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/\",\"name\":\"Query Array Collections in Couchbase Lite Using New API\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"datePublished\":\"2018-01-03T18:28:26+00:00\",\"dateModified\":\"2025-06-14T03:09:25+00:00\",\"description\":\"In this Couchbase blog post, we will discuss array query collections conducted using Couchbase Lite, the new API query interface based on N1QL.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png\",\"width\":1716,\"height\":842,\"caption\":\"SQL for JSON Query\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Query Array Collections in Couchbase Lite\"}]},{\"@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\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Query Array Collections in Couchbase Lite Using New API","description":"Nesta postagem do blog do Couchbase, discutiremos as cole\u00e7\u00f5es de consulta de matriz conduzidas usando o Couchbase Lite, a nova interface de consulta da API baseada em N1QL.","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\/querying-array-collections-couchbase-mobile\/","og_locale":"pt_BR","og_type":"article","og_title":"How to Query Array Collections in Couchbase Lite","og_description":"In this Couchbase blog post, we will discuss array query collections conducted using Couchbase Lite, the new API query interface based on N1QL.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/querying-array-collections-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-01-03T18:28:26+00:00","article_modified_time":"2025-06-14T03:09:25+00:00","og_image":[{"width":1716,"height":842,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"How to Query Array Collections in Couchbase Lite","datePublished":"2018-01-03T18:28:26+00:00","dateModified":"2025-06-14T03:09:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/"},"wordCount":1333,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","keywords":["ios","swift"],"articleSection":[".NET","Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/","name":"Query Array Collections in Couchbase Lite Using New API","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","datePublished":"2018-01-03T18:28:26+00:00","dateModified":"2025-06-14T03:09:25+00:00","description":"Nesta postagem do blog do Couchbase, discutiremos as cole\u00e7\u00f5es de consulta de matriz conduzidas usando o Couchbase Lite, a nova interface de consulta da API baseada em N1QL.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/11\/feature_image.png","width":1716,"height":842,"caption":"SQL for JSON Query"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/querying-array-collections-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Query Array Collections in Couchbase Lite"}]},{"@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\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Diretora S\u00eanior, Gerenciamento de Produtos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"Priya Rajagopal \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4410","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\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4410"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4410\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4188"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4410"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}