{"id":2454,"date":"2016-12-12T14:52:52","date_gmt":"2016-12-12T14:52:51","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2454"},"modified":"2025-06-13T19:29:36","modified_gmt":"2025-06-14T02:29:36","slug":"moving-from-mongodb-to-couchbase-server-revisited","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/moving-from-mongodb-to-couchbase-server-revisited\/","title":{"rendered":"Mudan\u00e7a do MongoDB para o servidor Couchbase (revisitado)"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p><em>Observa\u00e7\u00e3o: esta postagem do blog \u00e9 uma revis\u00e3o do artigo de Matthew Revell <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/moving-from-mongodb-to-couchbase-server\/\">Mudan\u00e7a do MongoDB para o Couchbase Server<\/a><\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Este \u00e9 um guia focado no desenvolvedor para mover o armazenamento de dados do seu aplicativo do MongoDB para o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Servidor Couchbase<\/a>. Se voc\u00ea estiver interessado em migrar de um banco de dados relacional para o Couchbase, comece com o artigo de Laurent <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/moving-sql-database-content-to-couchbase\/\">guia para fazer a mudan\u00e7a do PostgreSQL<\/a>e estarei trabalhando em uma postagem sobre migra\u00e7\u00e3o para o SQL Server no futuro.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Embora este guia n\u00e3o cubra todos os casos, ele oferece dicas sobre o que deve ser considerado ao planejar a migra\u00e7\u00e3o. Se voc\u00ea estiver interessado em aprender sobre <em>por que<\/em> voc\u00ea faria essa migra\u00e7\u00e3o, ou aprender sobre um cliente do Couchbase que tenha feito essa migra\u00e7\u00e3o, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/customers\/viber\/\">confira o Viber<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea usa atualmente o MongoDB e est\u00e1 usando o Mongoose ODM com o Node, aqui est\u00e1 um <a href=\"https:\/\/www.youtube.com\/embed\/wTvDKIQiVgE\">v\u00eddeo da confer\u00eancia Connect 2016 sobre migra\u00e7\u00e3o do MongoDB com Ottoman.js<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueversions\">Vers\u00f5es<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Este guia foi escrito para o Couchbase Server 4.5 e o MongoDB 3.4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truekey-differences\">Principais diferen\u00e7as<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Couchbase Server e o MongoDB s\u00e3o armazenamentos de documentos que podem operar em um ou v\u00e1rios servidores. No entanto, eles abordam as coisas de maneiras significativamente diferentes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Ao iniciar sua migra\u00e7\u00e3o do MongoDB para o Couchbase Server, voc\u00ea precisar\u00e1 considerar as seguintes diferen\u00e7as:<\/p>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\"><\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Servidor Couchbase<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">MongoDB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Modelos de dados<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Documento, valor-chave<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Documento<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Consulta<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">N1QL (SQL para JSON), visualiza\u00e7\u00f5es de mapa\/redu\u00e7\u00e3o, valor-chave<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Consulta ad-hoc, agrega\u00e7\u00e3o de mapa\/redu\u00e7\u00e3o<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Concorr\u00eancia<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bloqueio otimista e pessimista<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bloqueio otimista e pessimista (com WiredTiger)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Modelo de escala<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Mestre-mestre distribu\u00eddo<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Mestre-escravo com conjuntos de r\u00e9plicas<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truedata-model\">Modelo de dados<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Couchbase Server \u00e9 um armazenamento de documentos e um armazenamento de valores-chave.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tudo come\u00e7a com chave-valor, pois cada documento tem uma chave que voc\u00ea pode usar para obter e definir o conte\u00fado do documento. No entanto, voc\u00ea pode usar o Couchbase Server como um banco de dados de documentos, indexando e consultando o conte\u00fado dos documentos. <em>Observa\u00e7\u00e3o: se voc\u00ea estiver interessado em usar o Couchbase como um simples armazenamento de valores-chave, leia minha postagem no blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/using-couchbase-to-store-non-json-data\/\">Uso do Couchbase para armazenar dados n\u00e3o JSON<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truedifferences-between-bson-and-json\">Diferen\u00e7as entre BSON e JSON<\/h3>\n<div class=\"paragraph\">\n<p>\u00c9 prov\u00e1vel que seu aplicativo armazene documentos do tipo JSON no MongoDB, portanto, come\u00e7aremos por ele.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O MongoDB armazena dados no formato BSON, que \u00e9 um formato bin\u00e1rio semelhante ao JSON. A principal diferen\u00e7a ao migrar \u00e9 que o BSON registra informa\u00e7\u00f5es adicionais de tipo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Quando voc\u00ea exporta dados do MongoDB usando uma ferramenta como <em>mongoexporta\u00e7\u00e3o<\/em>a ferramenta produzir\u00e1 JSON que preserva essas informa\u00e7\u00f5es de tipo em um formato chamado Extended JSON.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vamos dar uma olhada em um exemplo de JSON estendido:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-javascript\">{\r\n \"myInt\": {\r\n  \"$numberLong\": \"123\"\r\n }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Como voc\u00ea pode ver, o JSON estendido ainda \u00e9 um JSON v\u00e1lido. Isso significa que voc\u00ea pode armazenar, indexar, consultar e recuper\u00e1-lo usando o Couchbase Server. No entanto, voc\u00ea precisar\u00e1 manter essas informa\u00e7\u00f5es adicionais de tipo (no exemplo acima, o JSON estendido est\u00e1 armazenando um n\u00famero inteiro longo como uma cadeia de caracteres, por exemplo) na camada do aplicativo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como alternativa, voc\u00ea pode converter o JSON estendido em JSON padr\u00e3o antes (ou depois) de import\u00e1-lo para o Couchbase Server. Com as consultas N1QL, isso deve ser relativamente simples, embora potencialmente tedioso. Aqui est\u00e1 um exemplo que converte o campo \"myInt\" acima em um campo de n\u00famero JSON padr\u00e3o:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-SQL\">UPDATE `default`\r\nSET myInt = TONUMBER(myInt.`$numberLong`)\r\nWHERE myInt.`$numberLong` IS NOT MISSING<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>O que resultaria em:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-javascript\">{\r\n  \"myInt\": 123\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truenon-json-data\">Dados n\u00e3o JSON<\/h3>\n<div class=\"paragraph\">\n<p>Tanto o MongoDB quanto o Couchbase Server podem armazenar dados bin\u00e1rios opacos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Embora a representa\u00e7\u00e3o interna dos dados bin\u00e1rios seja muito diferente entre os dois, voc\u00ea pode continuar a armazenar no Couchbase Server os dados bin\u00e1rios que vinha armazenando no MongoDB.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A principal diferen\u00e7a \u00e9 que o Couchbase Server pode armazenar bin\u00e1rios de at\u00e9 20 MB, enquanto o MongoDB oferece uma camada de conveni\u00eancia para dividir arquivos muito grandes em v\u00e1rios documentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/large-objects-in-a-database\/\">H\u00e1 fortes argumentos contra o armazenamento de bin\u00e1rios grandes em seu banco de dados<\/a>. Quando voc\u00ea tem muitos bin\u00e1rios muito grandes, pode considerar o uso de um servi\u00e7o de armazenamento de objetos dedicado para armazen\u00e1-los e usar o Couchbase para manter os metadados desses bin\u00e1rios.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truearchitecture\">Arquitetura<\/h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"truesharding\">Fragmenta\u00e7\u00e3o<\/h3>\n<div class=\"paragraph\">\n<p>O Couchbase Server fragmenta os dados e dimensiona horizontalmente, distribuindo automaticamente um espa\u00e7o de hash entre os n\u00f3s em um cluster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em seguida, ele usa a chave de seu documento para decidir em que parte do espa\u00e7o de hash - e, portanto, em que n\u00f3 do cluster - esse documento reside. Como desenvolvedor, isso \u00e9 abstra\u00eddo para voc\u00ea pelo SDK do cliente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Com o MongoDB, voc\u00ea precisa escolher um m\u00e9todo de fragmenta\u00e7\u00e3o e uma chave de fragmenta\u00e7\u00e3o. A chave de fragmento \u00e9 um campo indexado dentro de seu documento que determina onde o documento reside no cluster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A principal diferen\u00e7a aqui \u00e9 que o Couchbase Server lida automaticamente com toda a fragmenta\u00e7\u00e3o para voc\u00ea, enquanto o MongoDB lhe d\u00e1 a op\u00e7\u00e3o de escolher o m\u00e9todo de fragmenta\u00e7\u00e3o e a chave de fragmenta\u00e7\u00e3o. Se os seus aplicativos dependerem de uma distribui\u00e7\u00e3o espec\u00edfica de dados no cluster, ser\u00e1 necess\u00e1rio ajust\u00e1-los para permitir a distribui\u00e7\u00e3o baseada em hash usada pelo Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O sharding baseado em hash simplifica muito o dimensionamento em compara\u00e7\u00e3o com o MongoDB. Como desenvolvedor, voc\u00ea pode pensar que isso n\u00e3o lhe diz respeito e \u00e9 um problema de opera\u00e7\u00f5es. No entanto, isso significa que \u00e9 mais f\u00e1cil confiar no Couchbase Server caso o uso do seu software cres\u00e7a.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truereplication-and-consistency\">Replica\u00e7\u00e3o e consist\u00eancia<\/h3>\n<div class=\"imageblock\">\n<div class=\"content\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/december\/moving-from-mongodb-to-couchbase-server-revisited\/043_01_couchbase-three-nodes.png\" alt=\"Three Couchbase Server nodes using replication\" \/><\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase Server mant\u00e9m uma \u00fanica c\u00f3pia ativa de cada documento e, em seguida, at\u00e9 tr\u00eas r\u00e9plicas; voc\u00ea pode configurar o n\u00famero de r\u00e9plicas em um bucket ou por opera\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso significa que, durante a opera\u00e7\u00e3o normal, voc\u00ea lida com a mesma c\u00f3pia ativa sempre que escreve ou l\u00ea um documento. Como resultado, voc\u00ea n\u00e3o precisa lidar com vers\u00f5es conflitantes de documentos. As r\u00e9plicas entram em a\u00e7\u00e3o somente quando a c\u00f3pia ativa n\u00e3o est\u00e1 dispon\u00edvel.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como desenvolvedor, a distribui\u00e7\u00e3o e a replica\u00e7\u00e3o de documentos s\u00e3o abstra\u00eddas para voc\u00ea. Voc\u00ea escreve, l\u00ea e consulta usando sua conex\u00e3o com o bucket, e o SDK cuida exatamente de onde esses dados est\u00e3o armazenados. N\u00e3o h\u00e1 necessidade de levar em conta conjuntos de r\u00e9plicas ou esquemas de sharding.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea conhece o <a href=\"https:\/\/en.wikipedia.org\/wiki\/CAP_theorem\">Teorema CAP<\/a>Ent\u00e3o voc\u00ea tamb\u00e9m sabe que favorecer a consist\u00eancia afeta a disponibilidade. No caso de falha de um n\u00f3, seus documentos ativos ficar\u00e3o indispon\u00edveis por um curto per\u00edodo de tempo para permitir que o cluster promova as r\u00e9plicas apropriadas ao status ativo. Em seu c\u00f3digo, tudo o que voc\u00ea precisa fazer \u00e9 tentar novamente uma opera\u00e7\u00e3o que falhou.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"trueindexing\">Indexa\u00e7\u00e3o<\/h3>\n<div class=\"paragraph\">\n<p>O Couchbase Server oferece dois tipos amplos de \u00edndice:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>GSI: \u00edndices secund\u00e1rios globais<\/li>\n<li>visualiza\u00e7\u00f5es: geradas por consultas de redu\u00e7\u00e3o de mapas. A diferen\u00e7a \u00e9 mais do que um detalhe de implementa\u00e7\u00e3o, pois voc\u00ea cria e gerencia os dois tipos de \u00edndice de forma diferente. Em geral, voc\u00ea usar\u00e1 os \u00edndices GSI para replicar os \u00edndices do MongoDB.<\/li>\n<\/ul>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>MongoDB<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Servidor Couchbase<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Campo \u00fanico<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/indexes\/gsi-for-n1ql.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">GSI<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice composto<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/indexes\/gsi-for-n1ql.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">GSI<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice de v\u00e1rias chaves<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/indexes\/gsi-for-n1ql.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">GSI<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice geoespacial<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/indexes\/querying-using-spatial-views.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">\u00cdndice espacial em visualiza\u00e7\u00f5es<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">\u00cdndice de texto<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/full-text-search-overview.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Pesquisa de texto completo<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truenode-types\">Tipos de n\u00f3s<\/h3>\n<div class=\"paragraph\">\n<p>Quando voc\u00ea ultrapassa o limite de um servidor MongoDB, \u00e9 necess\u00e1rio introduzir processos de roteador e servidores de configura\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Com o Couchbase Server, essas duas fun\u00e7\u00f5es s\u00e3o encontradas no SDK do cliente. Quando voc\u00ea se conecta ao cluster a partir do seu aplicativo, o SDK recebe um mapa de onde cada fragmento est\u00e1 localizado no cluster. O Couchbase Server atualiza automaticamente o mapa do cluster sempre que a forma do cluster muda. Cada solicita\u00e7\u00e3o acontece diretamente do servidor do aplicativo para o n\u00f3 relevante do Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Quando o cluster crescer, voc\u00ea poder\u00e1 optar por executar n\u00f3s especializados em dados, consultas e indexa\u00e7\u00e3o. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/clustersetup\/services-mds.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Leia mais sobre escalonamento multidimensional<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tudo isso acontece de forma transparente para voc\u00ea, como desenvolvedor.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truebuckets-and-collections\">Baldes e cole\u00e7\u00f5es<\/h3>\n<div class=\"paragraph\">\n<p>Tanto o Couchbase Server quanto o MongoDB permitem que voc\u00ea divida seu conjunto de dados em grupos de documentos: O Couchbase tem buckets e o MongoDB tem cole\u00e7\u00f5es.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Enquanto as cole\u00e7\u00f5es do MongoDB t\u00eam um escopo equivalente ao das tabelas relacionais, os buckets do Couchbase Server talvez sejam mais equivalentes a um banco de dados relacional.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Essa distin\u00e7\u00e3o \u00e9 importante porque, normalmente, voc\u00ea n\u00e3o quer mais do que dez buckets em um \u00fanico cluster do Couchbase. Isso faz com que eles n\u00e3o sejam adequados como namespaces. Em vez disso, eles servem como uma maneira de compartilhar decis\u00f5es de configura\u00e7\u00e3o e modelagem entre tipos semelhantes de documentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso tem duas consequ\u00eancias principais:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Voc\u00ea precisa de outra maneira de atribuir nomes aos seus documentos<\/li>\n<li>Voc\u00ea precisa pensar em quando \u00e9 apropriado criar um novo bucket.<\/li>\n<\/ul>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"truewhen-to-use-multiple-buckets\">Quando usar v\u00e1rios buckets<\/h4>\n<div class=\"paragraph\">\n<p>Primeiro, precisamos pensar em como voc\u00ea pode alocar recursos para os buckets. As duas grandes considera\u00e7\u00f5es s\u00e3o:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>RAM<\/li>\n<li>Visualiza\u00e7\u00f5es e \u00edndices.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Ao criar um bucket, voc\u00ea aloca a ele uma parte da RAM de cada m\u00e1quina. A RAM que voc\u00ea atribui a um bucket deve ser grande o suficiente para armazenar o conjunto de trabalho desses dados mais os poucos bytes de metadados associados a cada documento.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso significa que voc\u00ea pode alocar diferentes quantidades de RAM adequadamente para diferentes conjuntos de dados com base em como voc\u00ea os acessa.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Da mesma forma, as exibi\u00e7\u00f5es e os \u00edndices do Couchbase s\u00e3o executados nos documentos dentro de um bucket, da mesma forma que uma consulta de redu\u00e7\u00e3o de mapa do MongoDB \u00e9 executada em uma \u00fanica cole\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea tiver alguns documentos que n\u00e3o precisam de indexa\u00e7\u00e3o, porque voc\u00ea s\u00f3 os acessa por meio da chave deles, e tiver alguns grupos de documentos com velocidades diferentes, ser\u00e1 prudente nunca executar indexadores no primeiro conjunto de dados e executar os indexadores com intervalos apropriados no restante.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Dividir nossos dados em diferentes compartimentos nos permite fazer bom uso da RAM e do tempo de CPU necess\u00e1rio para os indexadores.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vejamos um exemplo de um aplicativo de com\u00e9rcio eletr\u00f4nico: os dados que voc\u00ea armazenaria, seu perfil e como responderia a isso na configura\u00e7\u00e3o do seu bucket.<\/p>\n<\/div>\n<div class=\"responsive-table\">\n<table class=\"tableblock frame-all grid-all spread\">\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Tipo de dados<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Perfil de dados<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Perfil da ca\u00e7amba<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sess\u00f5es<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Respostas r\u00e1pidas, acesso a valores-chave, sess\u00f5es simult\u00e2neas previs\u00edveis<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para atender ao n\u00famero t\u00edpico de sess\u00f5es ao vivo, <strong>sem indexa\u00e7\u00e3o<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Perfis de usu\u00e1rio<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Respostas r\u00e1pidas enquanto os usu\u00e1rios est\u00e3o ativos, os dados mudam lentamente<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para atender aos perfis de usu\u00e1rio para o n\u00famero t\u00edpico de sess\u00f5es ao vivo, indexa\u00e7\u00e3o em<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Dados do pedido<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Leitura intensa ap\u00f3s a cria\u00e7\u00e3o inicial, vida \u00fatil curta<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para atender a pedidos de um n\u00famero t\u00edpico de sess\u00f5es ao vivo, indexa\u00e7\u00e3o em<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Dados do produto<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Necessidade de respostas r\u00e1pidas, leitura pesada<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para caber todo o cat\u00e1logo, indexa\u00e7\u00e3o em<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>\u00c9 um pouco mais complicado do que decidir se a indexa\u00e7\u00e3o est\u00e1 ativada ou desativada. Em vez disso, voc\u00ea escolhe os tipos de \u00edndice, e a velocidade das atualiza\u00e7\u00f5es decide a frequ\u00eancia de execu\u00e7\u00e3o dos indexadores. A combina\u00e7\u00e3o de dados de movimenta\u00e7\u00e3o lenta e r\u00e1pida pode ser ineficiente, pois os indexadores de um compartimento s\u00e3o executados em todos os documentos desse compartimento, inclusive os que n\u00e3o foram alterados.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"truenamespacing-documents\">Namespacing de documentos<\/h4>\n<div class=\"paragraph\">\n<p>Se n\u00e3o pudermos usar compartimentos como namespaces, como poderemos distinguir facilmente os diferentes tipos de documentos?<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea deve usar uma combina\u00e7\u00e3o de:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Nomea\u00e7\u00e3o de chaves<\/li>\n<li>Usar um \"tipo\" em seu documento JSON.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/data-modelling-key-design\/\">Uso de prefixos e sufixos sem\u00e2nticos em seus nomes de chaves<\/a> \u00e9 uma maneira f\u00e1cil de atribuir nomes aos seus documentos, especialmente quando voc\u00ea estiver usando o Couchbase para valores-chave.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A exig\u00eancia de um tipo em seus esquemas de documentos fornece os dados necess\u00e1rios para criar consultas que se aplicam somente a determinados tipos de documentos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueprogramming-model\">Modelo de programa\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>H\u00e1 tr\u00eas maneiras de trabalhar com o Couchbase Server:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Acesso simples a valores-chave: consist\u00eancia forte, respostas em menos de um milissegundo<\/li>\n<li>Visualiza\u00e7\u00f5es: geradas por consultas de redu\u00e7\u00e3o de mapas<\/li>\n<li>N1QL: Consultas semelhantes a SQL (com JOINs)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Vindo do MongoDB, voc\u00ea pode ficar tentado a traduzir todas as suas consultas do MongoDB para o N1QL. No entanto, vale a pena pensar sobre os m\u00e9ritos relativos de cada um e, em seguida, usar a combina\u00e7\u00e3o que atenda \u00e0s suas necessidades.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode ir muito longe com o acesso a valores-chave, por exemplo, usando <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/manual-secondary-indexes\/\">\u00edndices secund\u00e1rios manuais<\/a>.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truequery\">Consulta<\/h3>\n<div class=\"paragraph\">\n<p>O Couchbase Server oferece <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a>. O N1QL \u00e9 uma linguagem semelhante ao SQL e \u00e9 bem diferente da consulta no MongoDB.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vejamos um exemplo em que retornamos o nome dos funcion\u00e1rios do escrit\u00f3rio de Mountain View que trabalharam l\u00e1 por dois anos ou mais, ordenados por data de in\u00edcio:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-SQL\">SELECT name\r\nFROM `hr`\r\nWHERE office='Mountain View'\r\nAND type='employee'\r\nAND DATE_DIFF_MILLIS(startDate, NOW_MILLIS) &gt;= 63113904000\r\nORDER BY startDate;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea j\u00e1 trabalhou com SQL, o N1QL deve ser muito familiar para voc\u00ea. Voc\u00ea poder\u00e1 traduzir suas consultas do MongoDB para N1QL com relativamente pouco esfor\u00e7o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de come\u00e7ar a reescrever suas consultas, voc\u00ea deve considerar uma grande vantagem que o N1QL oferece: voc\u00ea pode executar <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/n1ql\/n1ql-language-reference\/from.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">JOINs<\/a> em todos os documentos. Vamos usar nossa consulta acima e tamb\u00e9m retornar o nome do gerente de cada pessoa.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlightjs highlight\"><code class=\"language-java\">SELECT r.name, s.name AS manager\r\nFROM `hr` r\r\nJOIN `hr` s ON KEYS r.manager\r\nWHERE r.office='Mountain View'\r\nAND r.type='employee'\r\nAND DATE_DIFF_MILLIS(r.startDate, NOW_MILLIS) &gt;= 63113904000\r\nORDER BY r.startDate;<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"trueconcurrency\">Concorr\u00eancia<\/h3>\n<div class=\"paragraph\">\n<p>No Couchbase Server, o bloqueio sempre ocorre no n\u00edvel do documento e h\u00e1 dois tipos:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Pessimista: nenhum outro ator pode escrever nesse documento at\u00e9 que ele seja liberado ou que o tempo limite seja atingido<\/li>\n<li>Otimista: use valores CAS (check-and-set) para verificar se o documento foi alterado desde a \u00faltima vez que voc\u00ea o tocou e aja de acordo.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">Bloqueio otimista<\/a> pode ser mais eficiente, mas o bloqueio pessimista pode ser necess\u00e1rio \u00e0s vezes. <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">Leia mais sobre como escolher o tipo certo de trava<\/a>.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truelibraries-and-integrations\">Bibliotecas e integra\u00e7\u00f5es<\/h3>\n<div class=\"paragraph\">\n<p>Existem <a href=\"https:\/\/developer.couchbase.com\/open-source-projects\">SDKs com suporte oficial<\/a> para todas as principais linguagens, incluindo Java, .NET, NodeJS, Python, Go, Ruby e C. Voc\u00ea tamb\u00e9m encontrar\u00e1 bibliotecas de clientes desenvolvidas pela comunidade para linguagens como Erlang.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Da mesma forma, h\u00e1 integra\u00e7\u00f5es oficiais com <a href=\"https:\/\/projects.spring.io\/spring-data-couchbase\/\">Dados do Spring<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/connectors\/intro.html\">Spark, Hadoop, Kafka, Talend, Elasticsearch e ODBC\/JDBC<\/a>, <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Linq2Couchbase<\/a> para .NET, e h\u00e1 um <a href=\"https:\/\/www.npmjs.com\/package\/ottoman\">NodeJS ODM chamado Ottoman<\/a>. Se voc\u00ea usa atualmente o Mongoose para MongoDB, assista a este v\u00eddeo <a href=\"https:\/\/www.youtube.com\/embed\/wTvDKIQiVgE\">V\u00eddeo sobre migra\u00e7\u00e3o do MongoDB com Ottoman.js<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueconclusion\">Conclus\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>A mudan\u00e7a de um armazenamento de documentos para outro \u00e9 relativamente simples, pois a forma geral dos dados n\u00e3o precisa mudar muito (ao contr\u00e1rio de uma migra\u00e7\u00e3o relacional).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como desenvolvedor que est\u00e1 fazendo a portabilidade de um aplicativo do MongoDB para o Couchbase Server, suas principais considera\u00e7\u00f5es s\u00e3o que voc\u00ea precisa:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Substitua o espa\u00e7amento de nomes de cole\u00e7\u00f5es por nomes de chaves e tipos de documentos<\/li>\n<li>Simplifique suas consultas usando N1QL JOINs<\/li>\n<li>Considere onde o acesso a valores-chave pode ser a melhor op\u00e7\u00e3o.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea est\u00e1 mudando do MongoDB para o Couchbase Server, certamente n\u00e3o \u00e9 o primeiro. Essa \u00e9 uma \u00f3tima not\u00edcia para voc\u00ea, pois encontrar\u00e1 pessoas que j\u00e1 fizeram a mudan\u00e7a antes em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">os f\u00f3runs do Couchbase<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se tiver alguma d\u00favida, coment\u00e1rio ou se encontrar algo impreciso, deixe um coment\u00e1rio ou entre em contato com <a href=\"https:\/\/twitter.com\/mgroves\">eu no Twitter<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Note: this blog post is a revist of Matthew Revell\u2019s Moving from MongoDB to Couchbase Server This is a developer-focused guide to moving your application\u2019s data store from MongoDB to Couchbase Server. If you\u2019re interested in migrating from a relational [&hellip;]<\/p>","protected":false},"author":18,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1816,1819,1812],"tags":[1261,1458,1309],"ppma_author":[8982],"class_list":["post-2454","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-server","category-data-modeling","category-n1ql-query","tag-json","tag-migration","tag-mongodb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Moving from MongoDB to Couchbase server (revisited)<\/title>\n<meta name=\"description\" content=\"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.\" \/>\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\/moving-from-mongodb-to-couchbase-server-revisited\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moving from MongoDB to Couchbase server (revisited)\" \/>\n<meta property=\"og:description\" content=\"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/moving-from-mongodb-to-couchbase-server-revisited\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-12T14:52:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:29:36+00:00\" \/>\n<meta name=\"author\" content=\"Matthew Revell, Lead Developer Advocate, EMEA, 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=\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\"},\"author\":{\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555\"},\"headline\":\"Moving from MongoDB to Couchbase server (revisited)\",\"datePublished\":\"2016-12-12T14:52:51+00:00\",\"dateModified\":\"2025-06-14T02:29:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\"},\"wordCount\":2240,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"JSON\",\"migration\",\"mongodb\"],\"articleSection\":[\"Application Design\",\"Couchbase Server\",\"Data Modeling\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\",\"name\":\"Moving from MongoDB to Couchbase server (revisited)\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-12-12T14:52:51+00:00\",\"dateModified\":\"2025-06-14T02:29:36+00:00\",\"description\":\"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#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\/moving-from-mongodb-to-couchbase-server-revisited\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moving from MongoDB to Couchbase server (revisited)\"}]},{\"@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\/6c3060a94353df62a71d4672b3454555\",\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g\",\"caption\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\"},\"description\":\"Matthew Revell is a Lead Dev Advocate, EMEA Couchbase. He developed a global strategy for putting Couchbase front in the minds of the product's developers.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-revell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mudan\u00e7a do MongoDB para o servidor Couchbase (revisitado)","description":"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.","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\/moving-from-mongodb-to-couchbase-server-revisited\/","og_locale":"pt_BR","og_type":"article","og_title":"Moving from MongoDB to Couchbase server (revisited)","og_description":"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/moving-from-mongodb-to-couchbase-server-revisited\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-12-12T14:52:51+00:00","article_modified_time":"2025-06-14T02:29:36+00:00","author":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/"},"author":{"name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555"},"headline":"Moving from MongoDB to Couchbase server (revisited)","datePublished":"2016-12-12T14:52:51+00:00","dateModified":"2025-06-14T02:29:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/"},"wordCount":2240,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["JSON","migration","mongodb"],"articleSection":["Application Design","Couchbase Server","Data Modeling","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/","url":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/","name":"Mudan\u00e7a do MongoDB para o servidor Couchbase (revisitado)","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-12-12T14:52:51+00:00","dateModified":"2025-06-14T02:29:36+00:00","description":"This post will guide you how to move your application\u2019s data store from MongoDB to Couchbase Server. Also see difference between MongoDB vs Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#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\/moving-from-mongodb-to-couchbase-server-revisited\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Moving from MongoDB to Couchbase server (revisited)"}]},{"@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\/6c3060a94353df62a71d4672b3454555","name":"Matthew Revell, l\u00edder de suporte ao desenvolvedor, EMEA, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/b1bc555cd9166b46d6063003c3b92317","url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","caption":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase"},"description":"Matthew Revell \u00e9 um dos principais defensores do desenvolvimento do Couchbase na regi\u00e3o EMEA. Ele desenvolveu uma estrat\u00e9gia global para colocar o Couchbase na mente dos desenvolvedores do produto.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-revell\/"}]}},"authors":[{"term_id":8982,"user_id":18,"is_guest":0,"slug":"matthew-revell","display_name":"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3b38ea45b78371f0008a765ea828bfed91aa97c25981ebf214226402a510b39b?s=96&d=mm&r=g","first_name":"Matthew","last_name":"Revell","user_url":"","author_category":"","description":"Matthew Revell \u00e9 um dos principais defensores do desenvolvimento do Couchbase na regi\u00e3o EMEA. Ele desenvolveu uma estrat\u00e9gia global para colocar o Couchbase na mente dos desenvolvedores do produto."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2454","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\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2454"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2454\/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=2454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2454"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}