{"id":2035,"date":"2015-12-16T19:40:00","date_gmt":"2015-12-16T19:39:59","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2035"},"modified":"2025-10-09T07:11:40","modified_gmt":"2025-10-09T14:11:40","slug":"easily-develop-node-js-and-couchbase-apps-with-ottoman","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/","title":{"rendered":"Desarrolle f\u00e1cilmente aplicaciones Node.js y Couchbase con Ottoman"},"content":{"rendered":"<p>Hace poco le\u00ed el art\u00edculo sobre <a href=\"https:\/\/scotch.io\/tutorials\/using-mongoosejs-in-node-js-and-mongodb-applications\" target=\"_blank\" rel=\"noopener\">Scotch.io<\/a> sobre el uso de Mongoose y MongoDB. Pens\u00e9, oye, Couchbase puede hacer lo mismo si usas Ottoman en lugar de Mongoose.<\/p>\n<p>Este art\u00edculo va a recorrer las mismas comparaciones que el art\u00edculo de Scotch.io, pero utilizando Ottoman y Couchbase en lugar de Mongoose y MongoDB.<\/p>\n<h2>Qu\u00e9 es el otomano<\/h2>\n<p>Ottoman, para Couchbase, es un mapeador de documentos de objetos (ODM) que le permite construir c\u00f3mo ser\u00eda su modelo de objetos, y luego auto-generar toda la l\u00f3gica boilerplate que va con \u00e9l.<\/p>\n<p>Ottoman nos permite acceder f\u00e1cilmente a comandos CRUD para Couchbase Server usando Node.js. Para usar Ottoman, aseg\u00farate de a\u00f1adirlo a tu proyecto Node.js usando el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">\r\nnpm install ottoman --save\r\n<\/code><\/pre>\n<p>Ahora que las librer\u00edas han sido descargadas a nuestro proyecto, necesitamos incluirlas en nuestro c\u00f3digo fuente. Esto se puede hacer a\u00f1adiendo lo siguiente a uno de sus archivos JavaScript:<\/p>\n<pre><code class=\"language-javascript\">\r\nvar ottoman = require(\"ottoman\");\r\n<\/code><\/pre>\n<p>Con las librer\u00edas de Ottoman incluidas en el proyecto, ahora tenemos que dar acceso a Ottoman a uno de nuestros cubos.<\/p>\n<pre><code class=\"language-javascript\">\r\nottoman.bucket = (new couchbase.Cluster(\"https:\/\/localhost:8091\")).openBucket(\"bucket-name-here\");\r\n<\/code><\/pre>\n<p>Si has utilizado el SDK de Node.js para Couchbase antes, lo anterior te resultar\u00e1 familiar. Simplemente nos conectamos a un cl\u00faster, abrimos un bucket y lo asignamos a Ottoman.<\/p>\n<p>En este punto podemos empezar a utilizar Ottoman para acelerar nuestro proceso de desarrollo.<\/p>\n<h2>Definir un modelo<\/h2>\n<p>Antes de que podamos empezar a hacer operaciones CRUD contra Couchbase, necesitamos definir nuestro modelo Ottoman. Estos modelos representan documentos en nuestra base de datos.<\/p>\n<p>Los modelos que creamos con Ottoman pueden tener propiedades y m\u00e9todos. A la parte de los m\u00e9todos llegaremos pronto, pero por ahora echa un vistazo a modelos sencillos con propiedades.<\/p>\n<h3>Modelo de ejemplo para usuarios<\/h3>\n<p>Tomemos el siguiente modelo para los nuevos usuarios de nuestra aplicaci\u00f3n (s\u00ed, es simple en este ejemplo).<\/p>\n<pre><code class=\"language-javascript\">\r\nvar UserModel = ottoman.model(\"User\", {\r\n        firstname: {type: \"string\"},\r\n        lastname: {type: \"string\"},\r\n        email: {type: \"string\"},\r\n        created_at: {type: \"Date\", default: Date.now}\r\n});\r\n<\/code><\/pre>\n<p>Ahora tenemos un modelo que puede utilizarse as\u00ed:<\/p>\n<pre><code class=\"language-javascript\">\r\nvar myUser = new UserModel({\r\n    firstname: \"Nic\",\r\n    lastname: \"Raboy\",\r\n    email: \"test@example.com\"\r\n});\r\n<\/code><\/pre>\n<p>Fijamos el <strong>Nombre de pila<\/strong>, <strong>apellido<\/strong>y <strong>correo electr\u00f3nico<\/strong>pero no tenemos que fijar el <strong>fecha_de_creaci\u00f3n<\/strong> valor. Esto se debe a que por defecto, si no lo establecemos, se establecer\u00e1 como la marca de tiempo actual.<\/p>\n<h2>M\u00e9todos personalizados<\/h2>\n<p>Digamos que queremos que un m\u00e9todo haga una tarea consistente dentro de nuestro modelo. Tomemos por ejemplo lo siguiente, suponiendo que ya hemos creado nuestro simple objeto UserModel.<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.prototype.printWhoDaBoss = function() {\r\n    console.log(this.firstname + \" \" + this.lastname + \" is Da Boss\");\r\n}\r\n<\/code><\/pre>\n<p>En teor\u00eda, esto imprimir\u00eda el nombre y el apellido de un modelo otomano concreto.<\/p>\n<h3>Ejemplos de uso de m\u00e9todos personalizados<\/h3>\n<p>Para utilizar un m\u00e9todo personalizado, podemos utilizar el m\u00e9todo <strong>printWhoDaBoss<\/strong> como se ha visto anteriormente y hacer algo como esto:<\/p>\n<pre><code class=\"language-javascript\">\r\nvar myUser = new UserModel({\r\n    firstname: \"Nic\",\r\n    lastname: \"Raboy\",\r\n    email: \"test@example.com\"\r\n});\r\n\r\nmyUser.printWhoDaBoss();\r\n<\/code><\/pre>\n<p>Lo anterior imprimir\u00eda <strong>Nic Raboy es el jefe<\/strong>. Por supuesto, esa funci\u00f3n en particular es in\u00fatil, pero puedes usar tu imaginaci\u00f3n para construir algo mejor con el concepto.<\/p>\n<h3>Ejecutar una funci\u00f3n antes de guardarla<\/h3>\n<p>\u00bfQu\u00e9 pasa si queremos ejecutar una tarea antes de que un documento se guarde en Couchbase? Esto se puede conseguir utilizando la funci\u00f3n <strong>pre<\/strong> m\u00e9todo reservado que viene con Ottoman. Por ejemplo, digamos que queremos modificar el apellido de todos antes de que se guarden:<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.pre(\"save\", function(next) {\r\n    this.lastname = \"da Boss \" + this.lastname;\r\n    next();\r\n});\r\n<\/code><\/pre>\n<p>Ahora, cuando alguien intente guardar un documento, lo que se demostrar\u00e1 en la siguiente secci\u00f3n, se antepondr\u00e1 su apellido. Por ejemplo <strong>Raboy<\/strong> se convertir\u00eda en <strong>da Boss Raboy<\/strong>. No es especialmente \u00fatil en este caso, pero puedes hacerte una idea.<\/p>\n<h2>Crear un documento<\/h2>\n<p>Para crear documentos tenemos que utilizar la funci\u00f3n incorporada <strong>guardar<\/strong> de Ottoman. Con nuestro modelo, podemos hacer algo como esto:<\/p>\n<pre><code class=\"language-javascript\">\r\nvar myUser = new UserModel({\r\n    firstname: \"Nic\",\r\n    lastname: \"Raboy\",\r\n    email: \"test@example.com\"\r\n});\r\n\r\nmyUser.save(function(error) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    console.log(\"Save successful!\");\r\n});\r\n<\/code><\/pre>\n<p>Se generar\u00eda una clave y el documento se guardar\u00eda en la base de datos.<\/p>\n<h2>Lectura de documentos NoSQL<\/h2>\n<p>Leer documentos con Ottoman es un poco diferente porque hay diferentes tipos de lecturas que podemos hacer. Vamos a desglosar algunos escenarios de uso.<\/p>\n<h3>Buscar todos los documentos<\/h3>\n<p>A menudo es dif\u00edcil en NoSQL obtener documentos cuando no conoces el id del documento. Sin crear una vista o usar la tecnolog\u00eda N1QL de Couchbase, no tendr\u00edas mucha suerte. Aqu\u00ed tienes una alternativa.<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.find({}, function(error, result) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    \/\/ Do something with the resulting Ottoman models\r\n});\r\n<\/code><\/pre>\n<p>Lo anterior encontrar\u00eda todos los documentos que fueron creados usando el Ottoman UserModel.<\/p>\n<h3>Buscar un documento concreto<\/h3>\n<p>He aqu\u00ed otro escenario. Supongamos que no quieres todos los documentos y no conoces el id del documento. Puedes hacer una consulta con Ottoman expandiendo sobre la base de datos <strong>encontrar<\/strong> mando.<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.find({lastname: \"Raboy\"}, function(error, result) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    \/\/ Do something with the resulting Ottoman model\r\n});\r\n<\/code><\/pre>\n<h3>Buscar un documento por ID<\/h3>\n<p>Digamos que conoces el id del documento que quieres. Usted puede agarrar el modelo otomano ejecutando:<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.getById(\"document-id-here\", function(error, result) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    \/\/ Do something with the resulting Ottoman model\r\n});\r\n<\/code><\/pre>\n<p>Esto es similar a utilizar la funci\u00f3n <strong>consiga<\/strong> del SDK de Node.js, sin embargo, en lugar de datos JSON con los que te quedas, tienes un modelo Ottoman completamente funcional.<\/p>\n<h2>Actualizar un documento existente<\/h2>\n<p>Actualizar documentos con Ottoman puede ser un poco complicado porque primero debes haber cargado el documento antes de intentar hacer una manipulaci\u00f3n sobre \u00e9l. Lo que podr\u00edas hacer es encontrar el documento en particular por id, y luego ejecutar el comando guardar de esta manera:<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.getById(\"document-id-here\", function(error, result) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    result.firstname = \"Nicolas\",\r\n    result.save(function(error) {\r\n        if(error) {\r\n            console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n        }\r\n    });\r\n});\r\n<\/code><\/pre>\n<p>En el ejemplo anterior, primero habr\u00eda obtenido mi modelo concreto, habr\u00eda cambiado s\u00f3lo el nombre del mismo y, a continuaci\u00f3n, habr\u00eda llamado a guardar. La direcci\u00f3n <strong>guardar<\/strong> crear\u00e1 o actualizar\u00e1, pero depende de usted conducir hasta ese punto.<\/p>\n<h2>Eliminar un documento<\/h2>\n<p>La supresi\u00f3n de un documento funcionar\u00e1 de forma similar a la actualizaci\u00f3n de un documento con Ottoman. Primero debe cargar el documento haciendo una b\u00fasqueda, luego llamando a la funci\u00f3n <strong>eliminar<\/strong> funci\u00f3n. A continuaci\u00f3n se muestra un ejemplo sencillo:<\/p>\n<pre><code class=\"language-javascript\">\r\nUserModel.getById(\"document-id-here\", function(error, result) {\r\n    if(error) {\r\n        console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n    }\r\n    result.remove(function(error) {\r\n        if(error) {\r\n            console.log(\"An error happened -&gt; \" + JSON.stringify(error));\r\n        }\r\n        console.log(\"Document was removed!\");\r\n    });\r\n});\r\n<\/code><\/pre>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Ottoman es una gran herramienta ODM para Couchbase que modela nuestros objetos y juega muy bien para operaciones de tipo CRUD. Mongoose para MongoDB intenta ser como Ottoman como se demuestra en el art\u00edculo sobre <a href=\"https:\/\/scotch.io\/tutorials\/using-mongoosejs-in-node-js-and-mongodb-applications\" target=\"_blank\" rel=\"noopener\">Scotch.io<\/a> sobre Mongoose y MongoDB. Este art\u00edculo pretend\u00eda mostrar c\u00f3mo Ottoman es igual de f\u00e1cil, si no m\u00e1s, de usar.<\/p>","protected":false},"excerpt":{"rendered":"<p>I recently read the article on Scotch.io regarding using Mongoose and MongoDB. I thought to myself, hey, Couchbase can do the same thing if you use Ottoman instead of Mongoose. This article is going to walk through the same comparisons [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1822,10128],"tags":[1510],"ppma_author":[9032],"class_list":["post-2035","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-node-js","category-ottoman","tag-odm"],"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>Easily Develop Node.js and Couchbase Apps with Ottoman<\/title>\n<meta name=\"description\" content=\"This article is going to walk through the same comparisons as the Scotch.io article, but use Ottoman and Couchbase instead of Mongoose and MongoDB.\" \/>\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\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Easily Develop Node.js and Couchbase Apps with Ottoman\" \/>\n<meta property=\"og:description\" content=\"This article is going to walk through the same comparisons as the Scotch.io article, but use Ottoman and Couchbase instead of Mongoose and MongoDB.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T19:39:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:11:40+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Easily Develop Node.js and Couchbase Apps with Ottoman\",\"datePublished\":\"2015-12-16T19:39:59+00:00\",\"dateModified\":\"2025-10-09T14:11:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\"},\"wordCount\":958,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"odm\"],\"articleSection\":[\"Couchbase Server\",\"Node.js\",\"Ottoman.js ODM\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\",\"name\":\"Easily Develop Node.js and Couchbase Apps with Ottoman\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T19:39:59+00:00\",\"dateModified\":\"2025-10-09T14:11:40+00:00\",\"description\":\"This article is going to walk through the same comparisons as the Scotch.io article, but use Ottoman and Couchbase instead of Mongoose and MongoDB.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#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\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Easily Develop Node.js and Couchbase Apps with Ottoman\"}]},{\"@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\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Desarrolle f\u00e1cilmente aplicaciones Node.js y Couchbase con Ottoman","description":"Este art\u00edculo va a recorrer las mismas comparaciones que el art\u00edculo de Scotch.io, pero utilizando Ottoman y Couchbase en lugar de Mongoose y MongoDB.","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\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/","og_locale":"es_MX","og_type":"article","og_title":"Easily Develop Node.js and Couchbase Apps with Ottoman","og_description":"This article is going to walk through the same comparisons as the Scotch.io article, but use Ottoman and Couchbase instead of Mongoose and MongoDB.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2015-12-16T19:39:59+00:00","article_modified_time":"2025-10-09T14:11:40+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Easily Develop Node.js and Couchbase Apps with Ottoman","datePublished":"2015-12-16T19:39:59+00:00","dateModified":"2025-10-09T14:11:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/"},"wordCount":958,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["odm"],"articleSection":["Couchbase Server","Node.js","Ottoman.js ODM"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/","url":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/","name":"Desarrolle f\u00e1cilmente aplicaciones Node.js y Couchbase con Ottoman","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T19:39:59+00:00","dateModified":"2025-10-09T14:11:40+00:00","description":"Este art\u00edculo va a recorrer las mismas comparaciones que el art\u00edculo de Scotch.io, pero utilizando Ottoman y Couchbase en lugar de Mongoose y MongoDB.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#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\/easily-develop-node-js-and-couchbase-apps-with-ottoman\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Easily Develop Node.js and Couchbase Apps with Ottoman"}]},{"@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\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2035","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\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2035"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2035\/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=2035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2035"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}