{"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\/es\/moving-from-mongodb-to-couchbase-server-revisited\/","title":{"rendered":"Pasar de MongoDB al servidor Couchbase (revisitado)"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p><em>Nota: esta entrada de blog es una revisi\u00f3n de Matthew Revell's <a href=\"https:\/\/www.couchbase.com\/blog\/es\/moving-from-mongodb-to-couchbase-server\/\">Pasar de MongoDB a Couchbase Server<\/a><\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta es una gu\u00eda centrada en el desarrollador para mover el almac\u00e9n de datos de su aplicaci\u00f3n de MongoDB a <a href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Servidor Couchbase<\/a>. Si est\u00e1 interesado en migrar de una base de datos relacional a Couchbase, comience con el libro de Laurent <a href=\"https:\/\/www.couchbase.com\/blog\/es\/moving-sql-database-content-to-couchbase\/\">Gu\u00eda para pasar de PostgreSQL<\/a>y en el futuro publicar\u00e9 un post sobre la migraci\u00f3n a SQL Server.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aunque esta gu\u00eda no cubre todos los casos, s\u00ed ofrece indicaciones sobre lo que debe tener en cuenta al planificar su migraci\u00f3n. Si le interesa saber m\u00e1s sobre <em>por qu\u00e9<\/em> usted har\u00eda esta migraci\u00f3n, o aprender sobre un cliente de Couchbase que haya hecho esta migraci\u00f3n, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/customers\/viber\/\">echa un vistazo a Viber<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si actualmente utilizas MongoDB, y est\u00e1s utilizando Mongoose ODM con Node, aqu\u00ed tienes un <a href=\"https:\/\/www.youtube.com\/embed\/wTvDKIQiVgE\">v\u00eddeo de la conferencia Connect 2016 sobre Migraci\u00f3n desde MongoDB con Ottoman.js<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueversions\">Versiones<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta gu\u00eda est\u00e1 escrita para Couchbase Server 4.5 y MongoDB 3.4.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truekey-differences\">Principales diferencias<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase Server y MongoDB son almacenes de documentos que pueden operar en uno o varios servidores. Sin embargo, abordan las cosas de maneras significativamente diferentes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cuando empieces tu migraci\u00f3n de MongoDB a Couchbase Server, tendr\u00e1s que tener en cuenta las siguientes diferencias:<\/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 datos<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Documento, clave-valor<\/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), vistas map\/reduce, clave-valor<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Consulta ad hoc, agregaci\u00f3n map\/reduce<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Concurrencia<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bloqueo optimista y pesimista<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Bloqueo optimista y pesimista (con 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\">Distribuido maestro-maestro<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Maestro-esclavo con 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 datos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase Server es tanto un almac\u00e9n de documentos como un almac\u00e9n clave-valor.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Todo empieza con clave-valor, ya que cada documento tiene una clave que puedes usar para obtener y establecer el contenido del documento. Sin embargo, puedes usar Couchbase Server como una base de datos de documentos indexando y consultando el contenido de los documentos. <em>Nota: si est\u00e1s interesado en utilizar Couchbase como almac\u00e9n de valores clave, lee mi entrada en el blog sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-couchbase-to-store-non-json-data\/\">Uso de Couchbase para almacenar datos no JSON<\/a>.<\/em><\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truedifferences-between-bson-and-json\">Diferencias entre BSON y JSON<\/h3>\n<div class=\"paragraph\">\n<p>Es probable que tu aplicaci\u00f3n almacene documentos de tipo JSON en MongoDB, as\u00ed que empezaremos por ah\u00ed.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>MongoDB almacena datos en formato BSON, que es un formato binario similar a JSON. La diferencia clave a la hora de migrar es que BSON registra informaci\u00f3n de tipo adicional.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al exportar datos de MongoDB mediante una herramienta como <em>mongoexport<\/em>la herramienta producir\u00e1 JSON que conserva esa informaci\u00f3n de tipo en un formato denominado JSON extendido.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Veamos un ejemplo en JSON extendido:<\/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 puedes ver, el JSON extendido sigue siendo JSON v\u00e1lido. Eso significa que puedes almacenarlo, indexarlo, consultarlo y recuperarlo usando Couchbase Server. Sin embargo, tendr\u00e1s que mantener esa informaci\u00f3n de tipo adicional (en el ejemplo anterior, Extended JSON est\u00e1 almacenando un entero largo como una cadena, por ejemplo) en la capa de aplicaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Alternativamente, puedes convertir el JSON extendido a JSON est\u00e1ndar antes (o despu\u00e9s) de importarlo a Couchbase Server. Con consultas N1QL, esto deber\u00eda ser relativamente sencillo, aunque potencialmente tedioso. Aqu\u00ed tienes un ejemplo que convierte el campo \"myInt\" anterior en un campo num\u00e9rico JSON est\u00e1ndar:<\/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>Lo que resultar\u00eda en:<\/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\">Datos no JSON<\/h3>\n<div class=\"paragraph\">\n<p>Tanto MongoDB como Couchbase Server pueden almacenar datos binarios opacos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aunque la representaci\u00f3n interna de los datos binarios difiere mucho entre ambos, puedes seguir almacenando en Couchbase Server los datos binarios que has estado almacenando en MongoDB.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La principal diferencia es que Couchbase Server puede almacenar binarios de hasta 20 MB de tama\u00f1o, mientras que MongoDB ofrece una capa de conveniencia para fragmentar archivos muy grandes en m\u00faltiples documentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/large-objects-in-a-database\/\">Hay argumentos de peso en contra de almacenar binarios de gran tama\u00f1o en la base de datos<\/a>. Cuando tengas muchos binarios muy grandes, puedes considerar usar un servicio dedicado de almacenamiento de objetos para almacenarlos mientras usas Couchbase para mantener los metadatos de esos binarios.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"truearchitecture\">Arquitectura<\/h2>\n<div class=\"sectionbody\">\n<div class=\"sect2\">\n<h3 id=\"truesharding\">Fragmentaci\u00f3n<\/h3>\n<div class=\"paragraph\">\n<p>Couchbase Server fragmenta los datos y escala horizontalmente distribuyendo autom\u00e1ticamente un espacio hash entre los nodos de un cl\u00faster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, utiliza la clave de tu documento para decidir en qu\u00e9 parte del espacio hash -y, por tanto, en qu\u00e9 nodo del cl\u00faster- reside ese documento. Como desarrollador, esto se abstrae para ti en el SDK del cliente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Con MongoDB necesitas elegir un m\u00e9todo de fragmentaci\u00f3n y una clave de fragmentaci\u00f3n. La clave de fragmentaci\u00f3n es un campo indexado dentro del documento que determina en qu\u00e9 parte del cl\u00faster reside el documento.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La principal diferencia aqu\u00ed es que Couchbase Server maneja autom\u00e1ticamente toda la fragmentaci\u00f3n por ti, mientras que MongoDB te da la opci\u00f3n de elegir el m\u00e9todo de fragmentaci\u00f3n y la clave de fragmentaci\u00f3n. Si tus aplicaciones dependen de una distribuci\u00f3n particular de datos a trav\u00e9s del cluster, entonces necesitar\u00e1s ajustarlo para permitir la distribuci\u00f3n basada en hash usada por Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>La fragmentaci\u00f3n basada en hash simplifica enormemente el escalado en comparaci\u00f3n con MongoDB. Como desarrollador, podr\u00edas pensar que esto no te concierne, y que es un problema de operaciones. Sin embargo, significa que es m\u00e1s f\u00e1cil confiar en Couchbase Server si el uso de tu software crece.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truereplication-and-consistency\">Replicaci\u00f3n y coherencia<\/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>Couchbase Server mantiene una \u00fanica copia activa de cada documento y luego hasta tres r\u00e9plicas; puedes configurar el n\u00famero de r\u00e9plicas a nivel de bucket o por operaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto significa que, en condiciones normales de funcionamiento, cada vez que se escribe en un documento o se lee de \u00e9l, se trabaja con la misma copia. De este modo, no es necesario manejar versiones conflictivas de los documentos. Las r\u00e9plicas s\u00f3lo entran en juego cuando la copia activa no est\u00e1 disponible.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como desarrollador, la distribuci\u00f3n y replicaci\u00f3n de documentos se abstrae para ti. Usted escribe, lee y consulta utilizando su conexi\u00f3n al bucket y el SDK gestiona con precisi\u00f3n d\u00f3nde se almacenan los datos. No hay necesidad de tener en cuenta conjuntos de r\u00e9plica o esquemas de fragmentaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si conoce el <a href=\"https:\/\/en.wikipedia.org\/wiki\/CAP_theorem\">Teorema CAP<\/a>entonces tambi\u00e9n sabr\u00e1 que favorecer la coherencia tiene un efecto sobre la disponibilidad. En caso de fallo de un nodo, sus documentos activos no estar\u00e1n disponibles durante un breve periodo de tiempo para permitir que el cl\u00faster promueva las r\u00e9plicas apropiadas al estado activo. En su c\u00f3digo, todo lo que necesita hacer es reintentar una operaci\u00f3n fallida.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"trueindexing\">Indexaci\u00f3n<\/h3>\n<div class=\"paragraph\">\n<p>Couchbase Server ofrece dos grandes tipos de \u00edndices:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>GSI: \u00edndices secundarios globales<\/li>\n<li>vistas: generadas por consultas map-reduce. La diferencia es m\u00e1s que un detalle de implementaci\u00f3n, ya que ambos tipos de \u00edndices se crean y gestionan de forma diferente. En general, usar\u00e1s \u00edndices GSI para replicar tus \u00edndices 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 compuesto<\/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 multiclave<\/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 en las vistas<\/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\">B\u00fasqueda 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 nodos<\/h3>\n<div class=\"paragraph\">\n<p>Cuando creces m\u00e1s all\u00e1 de un servidor MongoDB necesitas introducir procesos de enrutamiento y servidores de configuraci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Con Couchbase Server, ambas funciones se encuentran en el SDK del cliente. Cuando te conectas al cluster desde tu aplicaci\u00f3n, el SDK recibe un mapa de d\u00f3nde vive cada fragmento en el cluster. Couchbase Server entonces actualiza autom\u00e1ticamente el mapa del cluster cada vez que la forma del cluster cambia. Cada petici\u00f3n pasa directamente del servidor de la aplicaci\u00f3n al nodo de Couchbase correspondiente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez que su cl\u00faster crezca, podr\u00e1 optar por ejecutar nodos especializados en datos, consultas e indexaci\u00f3n. <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/clustersetup\/services-mds.html?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">M\u00e1s informaci\u00f3n sobre el escalado multidimensional<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Todo esto ocurre de forma transparente para usted como desarrollador.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truebuckets-and-collections\">Cubos y colecciones<\/h3>\n<div class=\"paragraph\">\n<p>Tanto Couchbase Server como MongoDB te permiten dividir tu conjunto de datos en grupos de documentos: Couchbase tiene buckets y MongoDB tiene colecciones.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Mientras que las colecciones de MongoDB tienen un alcance equivalente a las tablas relacionales, los buckets de Couchbase Server son quiz\u00e1s m\u00e1s el equivalente a una base de datos relacional.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta distinci\u00f3n es importante porque normalmente no querr\u00e1s m\u00e1s de diez buckets en un \u00fanico cluster de Couchbase. Esto los hace inadecuados como espacios de nombres. En su lugar, sirven para compartir decisiones de configuraci\u00f3n y modelado entre tipos similares de documentos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto tiene dos consecuencias principales:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Necesita otra forma de asignar un espacio de nombres a sus documentos<\/li>\n<li>Hay que pensar cu\u00e1ndo conviene crear un nuevo cubo.<\/li>\n<\/ul>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"truewhen-to-use-multiple-buckets\">Cu\u00e1ndo utilizar cubos m\u00faltiples<\/h4>\n<div class=\"paragraph\">\n<p>En primer lugar, hay que pensar en c\u00f3mo asignar recursos a los cubos. Las dos grandes consideraciones son:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>RAM<\/li>\n<li>Vistas e \u00edndices.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Cuando creas un bucket, le asignas una parte de la RAM de cada m\u00e1quina. La memoria RAM que asignes a un bucket debe ser lo suficientemente grande como para almacenar el conjunto de trabajo de esos datos m\u00e1s los pocos bytes de metadatos asociados a cada documento.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto significa que puedes asignar diferentes cantidades de RAM a diferentes conjuntos de datos en funci\u00f3n de c\u00f3mo accedas a ellos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Del mismo modo, las vistas y los \u00edndices de Couchbase se ejecutan a trav\u00e9s de los documentos dentro de un bucket, al igual que una consulta map-reduce de MongoDB se ejecuta a trav\u00e9s de una sola colecci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tienes algunos documentos que no necesitan indexaci\u00f3n -porque s\u00f3lo accedes a ellos a trav\u00e9s de su clave- y tienes algunos grupos de documentos que tienen velocidades diferentes, puedes ver que ser\u00eda prudente no ejecutar nunca los indexadores en el primer grupo de datos y ejecutar los indexadores con intervalos adecuados en el resto.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Dividir nuestros datos en distintos buckets nos permite lograr tanto un buen uso de la RAM como del tiempo de CPU que necesitan los indexadores.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Veamos un ejemplo de aplicaci\u00f3n de comercio electr\u00f3nico: los datos que almacenar\u00eda, su perfil y c\u00f3mo responder\u00eda a ello en la configuraci\u00f3n de su cubo.<\/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 datos<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Perfil de datos<\/strong><\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\"><strong>Perfil del cubo<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Sesiones<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Respuestas r\u00e1pidas, acceso clave-valor, sesiones concurrentes predecibles<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para adaptarse al n\u00famero t\u00edpico de sesiones en directo, <strong>sin indexaci\u00f3n<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Perfiles de usuario<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Respuestas r\u00e1pidas mientras los usuarios est\u00e1n activos, los datos cambian lentamente<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para adaptarse a los perfiles de usuario para el n\u00famero t\u00edpico de sesiones en directo, indexaci\u00f3n en<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Datos del pedido<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Lectura intensiva tras la creaci\u00f3n inicial, corta vida \u00fatil<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para adaptarse a los pedidos de un n\u00famero t\u00edpico de sesiones en directo, indexaci\u00f3n en<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Datos del producto<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">Se necesitan respuestas r\u00e1pidas, leer pesado<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">RAM para todo el cat\u00e1logo, indexaci\u00f3n en<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"paragraph\">\n<p>Es algo m\u00e1s complicado que decidir si la indexaci\u00f3n est\u00e1 activada o desactivada. M\u00e1s bien, se eligen los tipos de \u00edndice, y la velocidad de las actualizaciones decide con qu\u00e9 frecuencia se ejecutan los indexadores. Mezclar datos lentos y r\u00e1pidos puede resultar ineficaz, ya que los indexadores de un bucket recorren todos los documentos de ese bucket, incluidos los que no se han modificado.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect3\">\n<h4 id=\"truenamespacing-documents\">Asignaci\u00f3n de nombres a los documentos<\/h4>\n<div class=\"paragraph\">\n<p>Si no podemos utilizar cubos como espacios de nombres, \u00bfc\u00f3mo distinguimos f\u00e1cilmente los distintos tipos de documentos?<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Deber\u00edas usar una combinaci\u00f3n de:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Nombres clave<\/li>\n<li>Utilizar un \"tipo\" en su documento JSON.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/data-modelling-key-design\/\">Utilizaci\u00f3n de prefijos y sufijos sem\u00e1nticos en los nombres de las claves<\/a> es una forma sencilla de asignar un espacio de nombre a tus documentos, especialmente si utilizas Couchbase para clave-valor.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Al exigir un tipo en los esquemas de los documentos, se obtienen los datos necesarios para crear consultas que s\u00f3lo se aplican 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 programaci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Hay tres formas de trabajar con Couchbase Server:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Acceso simple clave-valor: gran coherencia, respuestas en submilisegundos<\/li>\n<li>Vistas: generadas por consultas map-reduce<\/li>\n<li>N1QL: Consultas tipo SQL (con JOINs)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Viniendo de MongoDB, puede que tengas la tentaci\u00f3n de traducir todas tus consultas de MongoDB a N1QL. Sin embargo, vale la pena pensar en los m\u00e9ritos relativos de cada uno y luego usar la mezcla que se adapte a tus necesidades.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se puede llegar muy lejos con el acceso clave-valor, por ejemplo utilizando <a href=\"https:\/\/www.couchbase.com\/blog\/es\/manual-secondary-indexes\/\">\u00edndices secundarios manuales<\/a>.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truequery\">Consulta<\/h3>\n<div class=\"paragraph\">\n<p>Couchbase Server ofrece <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/n1ql\/\">N1QL<\/a>. N1QL es un lenguaje similar a SQL y es bastante diferente de las consultas en MongoDB.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Veamos un ejemplo en el que devolvemos el nombre de los empleados de la oficina de Mountain View que han trabajado all\u00ed durante dos a\u00f1os o m\u00e1s, ordenados por fecha de inicio:<\/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>N1QL deber\u00eda resultarte muy familiar si alguna vez has trabajado con SQL. Podr\u00e1s traducir tus consultas MongoDB a N1QL con relativamente poco esfuerzo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Antes de empezar a reescribir sus consultas, debe tener en cuenta una gran ventaja que ofrece N1QL: puede realizar <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\">Se une a<\/a> entre documentos. Tomemos nuestra consulta anterior y devolvamos tambi\u00e9n el nombre del responsable de cada persona.<\/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\">Concurrencia<\/h3>\n<div class=\"paragraph\">\n<p>En Couchbase Server, el bloqueo siempre ocurre a nivel de documento y hay dos tipos:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Pesimista: ning\u00fan otro actor puede escribir en ese documento hasta que se libere o se alcance un tiempo de espera.<\/li>\n<li>Optimista: utiliza valores CAS (check-and-set) para comprobar si el documento ha cambiado desde la \u00faltima vez que lo toc\u00f3 y actuar en consecuencia.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">Bloqueo optimista<\/a> puede ser m\u00e1s eficiente, pero el bloqueo pesimista puede ser necesario a veces. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">M\u00e1s informaci\u00f3n sobre c\u00f3mo elegir el tipo de cerradura adecuado<\/a>.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"truelibraries-and-integrations\">Bibliotecas e integraciones<\/h3>\n<div class=\"paragraph\">\n<p>Existen <a href=\"https:\/\/developer.couchbase.com\/open-source-projects\">SDK compatibles oficialmente<\/a> para los principales lenguajes, incluidos Java, .NET, NodeJS, Python, Go, Ruby y C. Tambi\u00e9n encontrar\u00e1 bibliotecas cliente desarrolladas por la comunidad para lenguajes como Erlang.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n existen integraciones oficiales con <a href=\"https:\/\/projects.spring.io\/spring-data-couchbase\/\">Datos de primavera<\/a>, <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/connectors\/intro.html\">Spark, Hadoop, Kafka, Talend, Elasticsearch y ODBC\/JDBC<\/a>, <a href=\"https:\/\/github.com\/couchbaselabs\/Linq2Couchbase\">Linq2Base<\/a> para .NET, y hay una <a href=\"https:\/\/www.npmjs.com\/package\/ottoman\">NodeJS ODM llamado Ottoman<\/a>. Si actualmente utiliza Mongoose para MongoDB, vea esto <a href=\"https:\/\/www.youtube.com\/embed\/wTvDKIQiVgE\">v\u00eddeo sobre la migraci\u00f3n desde MongoDB con Ottoman.js<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"trueconclusion\">Conclusi\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Pasar de un almac\u00e9n de documentos a otro es relativamente sencillo, ya que la forma general de los datos no tiene por qu\u00e9 cambiar demasiado (a diferencia de una migraci\u00f3n relacional).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Como desarrollador portando una aplicaci\u00f3n de MongoDB a Couchbase Server, tus principales consideraciones son que necesitas:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Sustituir el espaciado de nombres de las colecciones por nombres de claves y tipos de documentos<\/li>\n<li>Simplifique sus consultas utilizando N1QL JOINs<\/li>\n<li>Considere d\u00f3nde el acceso clave-valor puede ser la mejor opci\u00f3n.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Si est\u00e1s cambiando de MongoDB a Couchbase Server, seguro que no eres el primero. Eso es una gran noticia para ti porque encontrar\u00e1s gente que ha hecho el cambio antes en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">los foros de Couchbase<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si tiene alguna pregunta, comentario o encuentra algo inexacto, deje un comentario o p\u00f3ngase en contacto con <a href=\"https:\/\/twitter.com\/mgroves\">yo en 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 v26.2 (Yoast SEO v26.2) - 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\/es\/moving-from-mongodb-to-couchbase-server-revisited\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555\",\"name\":\"Matthew Revell, Lead Developer Advocate, EMEA, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/es\/author\/matthew-revell\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pasar de MongoDB al servidor Couchbase (revisitado)","description":"Este post te guiar\u00e1 c\u00f3mo mover el almac\u00e9n de datos de tu aplicaci\u00f3n de MongoDB a Couchbase Server. Tambi\u00e9n ver diferencia entre 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\/es\/moving-from-mongodb-to-couchbase-server-revisited\/","og_locale":"es_MX","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\/es\/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":"es","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":"Pasar de MongoDB al 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":"Este post te guiar\u00e1 c\u00f3mo mover el almac\u00e9n de datos de tu aplicaci\u00f3n de MongoDB a Couchbase Server. Tambi\u00e9n ver diferencia entre MongoDB vs Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/moving-from-mongodb-to-couchbase-server-revisited\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/6c3060a94353df62a71d4672b3454555","name":"Matthew Revell, Defensor principal del desarrollador, EMEA, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@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 es Lead Dev Advocate, EMEA Couchbase. Ha desarrollado una estrategia global para situar a Couchbase en la mente de los desarrolladores del producto.","url":"https:\/\/www.couchbase.com\/blog\/es\/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","author_category":"","last_name":"Revell","first_name":"Matthew","job_title":"","user_url":"","description":"Matthew Revell es Lead Dev Advocate, EMEA Couchbase. Ha desarrollado una estrategia global para situar a Couchbase en la mente de los desarrolladores del producto."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2454"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2454\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2454"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}