{"id":53617,"date":"2022-06-27T09:04:09","date_gmt":"2022-06-27T07:04:09","guid":{"rendered":"https:\/\/kinqsta.com\/es\/?p=53617&#038;post_type=knowledgebase&#038;preview_id=53617"},"modified":"2025-12-16T19:42:38","modified_gmt":"2025-12-16T18:42:38","slug":"que-es-mongodb","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/","title":{"rendered":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto"},"content":{"rendered":"<p>Este tutorial te introduce en la base de datos MongoDB. Descubrir\u00e1s c\u00f3mo instalar el software, manipular los datos y aplicar las t\u00e9cnicas de dise\u00f1o de datos a tus propias aplicaciones.<\/p>\n<p>Todos los ejemplos se han desarrollado con MongoDB 5, pero la mayor\u00eda funcionar\u00e1n con versiones anteriores o posteriores. El c\u00f3digo puede introducirse directamente en una aplicaci\u00f3n cliente o en el shell de MongoDB (mongo o mongosh) para consultar y actualizar la base de datos.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>\u00bfQu\u00e9 es MongoDB?<\/h2>\n<p>MongoDB es una <a href=\"https:\/\/kinqsta.com\/es\/blog\/bases-de-datos-de-codigo-abierto\/\">base de datos NoSQL de c\u00f3digo abierto<\/a>. NoSQL significa que la base de datos no utiliza tablas relacionales como una <a href=\"https:\/\/kinqsta.com\/es\/blog\/mongodb-vs-mysql\/\">base de datos SQL tradicional<\/a>.<\/p>\n<p>Hay una serie de tipos de bases de datos NoSQL, pero MongoDB almacena los datos en objetos similares a JavaScript, conocidos como <em>documents<\/em>, cuyo contenido tiene este aspecto:<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\"\n}<\/code><\/pre>\n<p><br \/>\nAunque MongoDB se ha convertido en sin\u00f3nimo del framework basado en JavaScript <a href=\"https:\/\/kinqsta.com\/es\/blog\/que-es-node-js\/\">Node.js<\/a>, hay <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/\" target=\"_blank\" rel=\"noopener noreferrer\">controladores oficiales de la base de datos<\/a> MongoDB para la mayor\u00eda de los frameworks, lenguajes y tiempos de ejecuci\u00f3n, incluidos <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/node\/current\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a>, <a href=\"https:\/\/kinqsta.com\/es\/blog\/php-vs-python\/\">PHP y Python<\/a>. Tambi\u00e9n puedes optar por bibliotecas como <a href=\"https:\/\/www.npmjs.com\/package\/mongoose\" target=\"_blank\" rel=\"noopener noreferrer\">Mongoose<\/a>, que ofrecen un mayor nivel de abstracci\u00f3n o funciones de mapeo relacional de objetos (ORM).<\/p>\n<p>A diferencia de las tablas SQL, no hay l\u00edmites estructurales sobre lo que puedes almacenar en MongoDB. Los esquemas de datos no se imponen: Puedes almacenar lo que quieras donde quieras. Esto hace que MongoDB sea ideal para estructuras de datos m\u00e1s org\u00e1nicas \u2014<em>o desordenadas\u2014<\/em>.<\/p>\n<p>Piensa en una agenda de contactos. Los individuos pueden tener a menudo varios n\u00fameros de tel\u00e9fono. Podr\u00edas definir tres campos de tel\u00e9fono en una tabla SQL, pero eso ser\u00eda demasiado para algunos contactos y demasiado poco para otros. En \u00faltima instancia, necesitar\u00e1s una tabla de tel\u00e9fonos independiente, lo que a\u00f1ade m\u00e1s complejidad.<\/p>\n<p>En MongoDB, esos n\u00fameros de tel\u00e9fono podr\u00edan definirse como una matriz ilimitada de objetos en el mismo documento:<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\",\n  telephone: [\n    { home: \"0123456789\" },\n    { work: \"9876543210\" },\n    { cell: \"3141592654\" }\n  ]\n}<\/code><\/pre>\n<p>Ten en cuenta que MongoDB utiliza una notaci\u00f3n de objetos similar a la de JavaScript para las actualizaciones y consultas de datos, lo que puede plantear algunos problemas si est\u00e1s acostumbrado a SQL.<\/p>\n<h2>Elementos de MongoDB<\/h2>\n<p>Antes de seguir adelante, echemos un vistazo a lo que hace que MongoDB funcione. Utilizaremos este vocabulario a lo largo de este art\u00edculo.<\/p>\n<ul>\n<li><strong>Documento:<\/strong> Un \u00fanico objeto individual en un almac\u00e9n de datos, an\u00e1logo a un registro o fila en una tabla de una base de datos SQL.<\/li>\n<li><strong>Campo:<\/strong> Un \u00fanico dato dentro de un documento, como un nombre o un n\u00famero de tel\u00e9fono, an\u00e1logo a un campo o columna de una tabla SQL.<\/li>\n<li><strong>Colecci\u00f3n:<\/strong> Un conjunto de documentos similares, an\u00e1logo a una tabla SQL. Aunque podr\u00edas poner todos tus documentos en una sola colecci\u00f3n, suele ser m\u00e1s pr\u00e1ctico agruparlos en tipos espec\u00edficos. En una agenda de contactos podr\u00edas tener una colecci\u00f3n para personas y otra para empresas.<\/li>\n<li><strong>Base de datos:<\/strong> Una colecci\u00f3n de datos relacionados, con un significado id\u00e9ntico al de una base de datos SQL.<\/li>\n<li><strong>Esquema:<\/strong> Un esquema define las estructuras de datos. En las bases de datos SQL debes definir definiciones de tablas con campos y tipos asociados antes de poder almacenar datos. Esto no es necesario en MongoDB, aunque es posible crear un esquema que valide los documentos antes de a\u00f1adirlos a una colecci\u00f3n.<\/li>\n<li><strong>\u00cdndice:<\/strong> Una estructura de datos utilizada para mejorar el rendimiento de las consultas, con un significado id\u00e9ntico al de los \u00edndices de SQL.<\/li>\n<li><strong>Clave primaria:<\/strong> Un identificador \u00fanico para cada documento. MongoDB a\u00f1ade autom\u00e1ticamente un campo _id \u00fanico e indexado a cada documento de una colecci\u00f3n.<\/li>\n<li><strong>Desnormalizaci\u00f3n:<\/strong> En las bases de datos SQL, la \u00abnormalizaci\u00f3n\u00bb es una t\u00e9cnica utilizada para organizar los datos y eliminar la duplicaci\u00f3n. En MongoDB, se fomenta la \u00abdesnormalizaci\u00f3n\u00bb. Se repiten activamente los datos y un solo documento podr\u00eda contener toda la informaci\u00f3n necesaria.<\/li>\n<li><strong>Uniones:<\/strong> SQL proporciona un operador JOIN para poder recuperar datos de varias tablas normalizadas en una sola consulta. Las uniones no eran posibles en MongoDB hasta la versi\u00f3n 3.6 y las limitaciones siguen existiendo. Esta es otra raz\u00f3n por la que los datos deben desnormalizarse en documentos autocontenidos.<\/li>\n<li><strong>Transacciones:<\/strong> Cuando una actualizaci\u00f3n cambia dos o m\u00e1s valores en un mismo documento, MongoDB se asegura de que todas tengan \u00e9xito o fallen. Las actualizaciones en dos o m\u00e1s documentos deben estar envueltas en una transacci\u00f3n. MongoDB admite las transacciones desde la versi\u00f3n 4.0, pero se requiere un conjunto de r\u00e9plicas multiservidor o un cl\u00faster fragmentado. Las instalaciones de ejemplo que se muestran a continuaci\u00f3n utilizan un \u00fanico servidor, por lo que las transacciones no son posibles.<\/li>\n<\/ul>\n<h2>C\u00f3mo Instalar MongoDB<\/h2>\n<p>Tienes tres opciones para usar MongoDB en tu m\u00e1quina local. Te guiaremos por cada una de ellas.<\/p>\n<h3>1. Utilizar Docker (Recomendado)<\/h3>\n<p><a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker<\/a> es una herramienta de gesti\u00f3n de software que puede instalar, configurar y ejecutar MongoDB o cualquier otra aplicaci\u00f3n en minutos.<\/p>\n<p><a href=\"https:\/\/dockerwebdev.com\/tutorials\/install-docker\/\" target=\"_blank\" rel=\"noopener noreferrer\">Instala Docker y Docker Compose<\/a> y luego crea una carpeta de proyecto con un \u00fanico archivo llamado docker-compose.yml que contenga el siguiente contenido (ten en cuenta que las sangr\u00edas son esenciales):<\/p>\n<pre><code class=\"language-bash\">version: '3'\n\nservices:\n\n  mongodb:\n    image: mongo:5\n    environment:\n      - MONGO_INITDB_ROOT_USERNAME=root\n      - MONGO_INITDB_ROOT_PASSWORD=pass\n      - MONGO_INITDB_DATABASE=mongodemo\n    container_name: mongodb\n    volumes:\n      - dbdata:\/data\/db\n    ports:\n      - \"27017:27017\"\n\n  adminer:\n    image: dehy\/adminer\n    container_name: adminer\n    depends_on:\n      - mongodb\n    ports:\n      - \"8080:80\"\n\nvolumes:\n  dbdata:<\/code><\/pre>\n<p>Accede a la carpeta desde la l\u00ednea de comandos y ejecuta<\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>Se descargar\u00e1 y lanzar\u00e1 la \u00faltima versi\u00f3n de MongoDB 5. La primera vez que se ejecute tardar\u00e1 unos minutos, pero las siguientes ser\u00e1n mucho m\u00e1s r\u00e1pidas.<\/p>\n<p>Ten en cuenta que:<\/p>\n<ul>\n<li>Se define una cuenta de administrador de MongoDB con el ID \u00abroot\u00bb y la contrase\u00f1a \u00abpass\u00bb.<\/li>\n<li>Los datos se guardan entre reinicios en un volumen Docker llamado dbdata.<\/li>\n<li>Tambi\u00e9n se proporciona el <a href=\"https:\/\/kinqsta.com\/es\/blog\/adminer\/\">cliente de base de datos Adminer<\/a>.<\/li>\n<\/ul>\n<p>Puedes utilizar cualquier cliente de base de datos MongoDB para conectarte a localhost:27017 utilizando el ID \u00abroot\u00bb y la contrase\u00f1a \u00abpass\u00bb. Alternativamente, puedes acceder a Adminer en <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a> e iniciar sesi\u00f3n con las siguientes credenciales:<\/p>\n<ul>\n<li><strong>Sistema:<\/strong> MongoDB (alfa)<\/li>\n<li><strong>Servidor:<\/strong> host.docker.internal<\/li>\n<li><strong>Nombre de usuario:<\/strong> root<\/li>\n<li><strong>Contrase\u00f1a:<\/strong> pass<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>El servidor host.docker.internal funcionar\u00e1 en dispositivos Mac y Windows que ejecuten Docker Desktop. Los usuarios de Linux deben utilizar la direcci\u00f3n IP de red del dispositivo, no el host local (Adminer lo resuelve a su propio contenedor Docker).<\/p>\n<\/aside>\n\n<figure id=\"attachment_123495\" aria-describedby=\"caption-attachment-123495\" style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123495 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/05\/adminer-login.png\" alt=\"Inicio de sesi\u00f3n de Adminer\" width=\"900\" height=\"455\"><figcaption id=\"caption-attachment-123495\" class=\"wp-caption-text\">Inicio de sesi\u00f3n de Adminer<\/figcaption><\/figure>\n<p>Adminer te permite inspeccionar las colecciones y los documentos. Sin embargo, ten en cuenta que las colecciones se denominan \u00abtablas\u00bb:<\/p>\n<figure id=\"attachment_123494\" aria-describedby=\"caption-attachment-123494\" style=\"width: 1102px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123494 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/05\/adminer-view.png\" alt=\"Vista de la colecci\u00f3n de Adminer\" width=\"1102\" height=\"577\"><figcaption id=\"caption-attachment-123494\" class=\"wp-caption-text\">Vista de la colecci\u00f3n de Adminer<\/figcaption><\/figure>\n<p>Para ejecutar comandos, puedes utilizar la Shell de MongoDB (<code>mongosh<\/code>) o el entorno de l\u00ednea de comandos REPL (Read Eval Print Loop) heredado de <code>mongo<\/code>.<\/p>\n<p>Accede al shell bash del contenedor Docker MongoDB:<\/p>\n<pre><code class=\"language-bash\">docker exec -it mongodb bash<\/code><\/pre>\n<p>A continuaci\u00f3n, lanza el shell de MongoDB con el ID y la contrase\u00f1a:<\/p>\n<pre><code class=\"language-bash\">mongosh -u root -p pass<\/code><\/pre>\n<p>(Si lo prefieres, puedes utilizar el comando heredado <code>mongo<\/code>.)<\/p>\n<p>A continuaci\u00f3n, puedes emitir comandos de MongoDB como los siguientes:<\/p>\n<ul>\n<li><strong><code>show dbs;<\/code><\/strong> &#8211; Mostrar todas las bases de datos<\/li>\n<li><strong><code>use mongodemo;<\/code><\/strong> &#8211; Utilizar una base de datos espec\u00edfica<\/li>\n<li><strong><code>show collections;<\/code><\/strong> &#8211; Listar las colecciones de una base de datos<\/li>\n<li><strong><code>db.person.find();<\/code><\/strong> &#8211; Listar todos los documentos de una colecci\u00f3n<\/li>\n<li><strong><code>exit;<\/code><\/strong> &#8211; Salir\/cerrar el shell<\/li>\n<\/ul>\n<p>Cierra MongoDB ejecutando el siguiente comando desde el directorio del proyecto:<\/p>\n<pre><code class=\"language-bash\">docker-compose down<\/code><\/pre>\n<h3>2. Utilizar un Proveedor en la Nube (Sin Instalaci\u00f3n)<\/h3>\n<p>Puedes utilizar una instancia de MongoDB alojada, por lo que no es necesario instalar nada localmente. Es imprescindible una conexi\u00f3n a Internet y la velocidad de respuesta depender\u00e1 del proveedor de alojamiento y de tu ancho de banda. La mayor\u00eda de los servicios cobrar\u00e1n una cuota mensual y\/o por uso de megabytes.<\/p>\n<p>El hosting normalmente proporcionar\u00e1 detalles para que puedas administrar la base de datos de forma remota utilizando el software cliente de MongoDB.<\/p>\n<h3>3. Instalar MongoDB Localmente<\/h3>\n<p>MongoDB se puede instalar y configurar en Linux, Windows o Mac OS. Hay dos ediciones disponibles:<\/p>\n<ol>\n<li>Una Edici\u00f3n Empresarial Comercial<\/li>\n<li>Una Edici\u00f3n Comunitaria de c\u00f3digo abierto (utilizada en este tutorial)<\/li>\n<\/ol>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/installation\/\" target=\"_blank\" rel=\"noopener noreferrer\">p\u00e1gina de instalaci\u00f3n de MongoDB<\/a> proporciona instrucciones para varios sistemas operativos. En general:<\/p>\n<ul>\n<li>Las ediciones de Linux se instalan utilizando un gestor de paquetes como <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-ubuntu\/\" target=\"_blank\" rel=\"noopener noreferrer\">apt en Ubuntu<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-os-x\/\" target=\"_blank\" rel=\"noopener noreferrer\">Las ediciones para Mac OS se instalan con brew<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-windows\/\" target=\"_blank\" rel=\"noopener noreferrer\">Las ediciones de Windows se instalan con un instalador .msi<\/a><\/li>\n<\/ul>\n<p>\u00a1Aseg\u00farate de seguir las instrucciones cuidadosamente para que tu instalaci\u00f3n tenga \u00e9xito!<\/p>\n<h2>C\u00f3mo Acceder a Tu Base de Datos MongoDB<\/h2>\n<p>Ahora que tu base de datos MongoDB est\u00e1 instalada, es el momento de aprender a gestionarla. Vamos a hablar de lo que tendr\u00e1s que hacer para acceder y trabajar con tu base de datos.<\/p>\n<h3>1. Instalar un Cliente MongoDB<\/h3>\n<p>Para administrar las bases de datos se necesita una aplicaci\u00f3n cliente MongoDB. Si utilizas una instalaci\u00f3n en la nube o local, te recomendamos que <a href=\"https:\/\/www.mongodb.com\/docs\/mongodb-shell\/install\/\" target=\"_blank\" rel=\"noopener noreferrer\">instales la l\u00ednea de comandos mongosh MongoDB Shell<\/a>.<\/p>\n<p><a href=\"https:\/\/www.adminer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Adminer<\/a> es un cliente de base de datos basado en la web que soporta MongoDB, aunque actualmente se limita a inspeccionar colecciones. Adminer se puede descargar como un \u00fanico script PHP, pero ya est\u00e1 configurado si utilizas la <a href=\"https:\/\/docs.google.com\/document\/d\/13hLswY74cFDedN7DoUWbIshf6K7wRI4myCvKcpvNIZ0\/edit#heading=h.jv0yfv8fhy7q\" target=\"_blank\" rel=\"noopener noreferrer\">instalaci\u00f3n Docker<\/a> o tienes <a href=\"https:\/\/kinqsta.com\/es\/docs\/devkinsta\/base-de-datos-devkinsta\/gestor-de-bases-de-datos\/\">instalado DevKinsta<\/a>.<\/p>\n<p>Una aplicaci\u00f3n cliente con interfaz gr\u00e1fica de usuario proporciona una interfaz mejor para actualizar e inspeccionar los datos. Hay varias opciones disponibles, incluida la gratuita y multiplataforma <a href=\"https:\/\/www.mongodb.com\/products\/compass\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB Compass<\/a>:<\/p>\n<figure id=\"attachment_123493\" aria-describedby=\"caption-attachment-123493\" style=\"width: 1315px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123493\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/05\/compass.png\" alt=\"MongoDB Compass\" width=\"1315\" height=\"932\"><figcaption id=\"caption-attachment-123493\" class=\"wp-caption-text\">MongoDB Compass<\/figcaption><\/figure>\n<p><a href=\"https:\/\/studio3t.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Studio 3T<\/a>, otro contendiente con interfaz gr\u00e1fico, ofrece una aplicaci\u00f3n comercial que otorga una funcionalidad limitada de forma gratuita:<\/p>\n<figure id=\"attachment_123492\" aria-describedby=\"caption-attachment-123492\" style=\"width: 1266px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123492\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/05\/studio3t.png\" alt=\"Studio 3T\" width=\"1266\" height=\"905\"><figcaption id=\"caption-attachment-123492\" class=\"wp-caption-text\">Studio 3T<\/figcaption><\/figure>\n<p>Puedes acceder a tu base de datos MongoDB con una de estas herramientas utilizando cualquiera de las siguientes:<\/p>\n<ol>\n<li>El nombre de red de la m\u00e1quina, la URL o la direcci\u00f3n IP (<strong>localhost <\/strong>para una instalaci\u00f3n local).<\/li>\n<li>El puerto de MongoDB (<strong>27017 <\/strong>por defecto).<\/li>\n<li>Un <b>ID <\/b>de usuario\u00a0y una <strong>contrase\u00f1a<\/strong>. Normalmente se define un usuario root durante la instalaci\u00f3n.<\/li>\n<\/ol>\n<h3>2. Establecer y Guardar las Credenciales de Acceso a la Base de Datos<\/h3>\n<p>El administrador root tiene acceso sin restricciones a todas las bases de datos. En general, debes utilizar un usuario personalizado con privilegios espec\u00edficos para limitar el acceso y <a href=\"https:\/\/kinqsta.com\/es\/blog\/seguridad-wordpress\/\">aumentar la seguridad<\/a>.<\/p>\n<p>Por ejemplo, el siguiente comando crea un usuario llamado <strong>myuser <\/strong>con la contrase\u00f1a <strong>mypass <\/strong>que tiene acceso de lectura y escritura a la base de datos <strong>mydb<\/strong>:<\/p>\n<pre><code class=\"language-bash\">use mydb;\n\ndb.createUser({\n  user: \"myuser\",\n  pwd: \"mypass\",\n  roles: [\n    { role: \"readWrite\", db: \"mydb\" }\n  ]\n});<\/code><\/pre>\n<h2>C\u00f3mo Insertar Nuevos Documentos en MongoDB<\/h2>\n<p>No es necesario definir una base de datos o una colecci\u00f3n antes de insertar tu primer documento. Utilizando cualquier cliente de MongoDB, simplemente pasa a una base de datos llamada mongodemo:<\/p>\n<pre><code class=\"language-bash\">use mongodemo;<\/code><\/pre>\n<p>A continuaci\u00f3n, inserta un \u00fanico documento en una nueva colecci\u00f3n de personas:<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne(\n  {\n    name: 'Abdul',\n    company: 'Alpha Inc',\n    telephone: [\n      { home: '0123456789' },\n      { work: '9876543210' }\n    ]\n  }\n);<\/code><\/pre>\n<p>Visualiza el documento ejecutando una consulta que devuelva todos los resultados de la colecci\u00f3n de personas:<\/p>\n<pre><code class=\"language-bash\">db.person.find({});<\/code><\/pre>\n<p>El resultado ser\u00e1 algo as\u00ed:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n  name: 'Abdul',\n  company: 'Alpha Inc',\n  telephone: [\n    { home: '0123456789' },\n    { work: '9876543210' }\n  ]\n}<\/code><\/pre>\n<h3>C\u00f3mo Insertar M\u00faltiples Documentos<\/h3>\n<p>Puedes insertar m\u00faltiples documentos en una colecci\u00f3n pasando un array a <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.insertMany\/\" target=\"_blank\" rel=\"noopener noreferrer\">insertMany()<\/a>. El siguiente c\u00f3digo crea documentos adicionales de persona y una nueva colecci\u00f3n de empresa:<\/p>\n<pre><code class=\"language-bash\">db.person.insertMany([\n  {\n    name: 'Brian',\n    company: 'Beta Inc'\n  },\n  {\n    name: 'Claire',\n    company: 'Gamma Inc',\n    telephone: [\n      { cell: '3141592654' }\n    ]\n  },\n  {\n    name: 'Dawn',\n    company: 'Alpha Inc'\n  },\n  {\n    name: 'Esther',\n    company: 'Beta Inc',\n    telephone: [\n      { home: '001122334455' }\n    ]\n  },\n  {\n    name: 'George',\n    company: 'Gamma Inc'\n  },\n  {\n    name: 'Henry',\n    company: 'Alpha Inc',\n    telephone: [\n      { work: '012301230123' },\n      { cell: '161803398875' }\n    ]\n  },\n]);\n\ndb.company.insertMany([\n  {\n    name: 'Alpha Inc',\n    base: 'US'\n  },\n  {\n    name: 'Beta Inc',\n    base: 'US'\n  },\n  {\n    name: 'Gamma Inc',\n    base: 'GB'\n  },\n]);<\/code><\/pre>\n<h3>\u00bfDe D\u00f3nde Viene el _id?<\/h3>\n<p>MongoDB asigna autom\u00e1ticamente un _id a cada documento de una colecci\u00f3n. Se trata de un ObjectID, un valor BSON (Binary Javascript Object Notation) que contiene:<\/p>\n<ul>\n<li>La \u00e9poca de Unix en segundos en el momento de la creaci\u00f3n (4 bytes)<\/li>\n<li>Un ID de m\u00e1quina\/proceso de 5 bytes<\/li>\n<li>Un contador de 3 bytes que comienza con un valor aleatorio<\/li>\n<\/ul>\n<p>Es la clave primaria del documento. Se garantiza que el valor hexadecimal de 24 caracteres es \u00fanico en todos los documentos de la base de datos, y no puede cambiarse una vez insertado.<\/p>\n<p>MongoDB tambi\u00e9n proporciona una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/ObjectId.getTimestamp\/\" target=\"_blank\" rel=\"noopener noreferrer\">funci\u00f3n getTimeStamp()<\/a> para que puedas obtener la fecha\/hora de creaci\u00f3n del documento sin tener que establecer expl\u00edcitamente un valor. Como alternativa, puedes definir tu propio valor _id \u00fanico cuando se crea un documento.<\/p>\n<h3>Desnormalizaci\u00f3n de los Datos<\/h3>\n<p>Los registros insertados anteriormente establecen la empresa de cada usuario en una cadena como \u00abAlpha Inc\u00bb. Esto no es recomendable en las bases de datos SQL normalizadas:<\/p>\n<ul>\n<li>Es f\u00e1cil cometer un error: un usuario est\u00e1 asignado a \u00abAlpha Inc\u00bb mientras que otro es \u00abAlpha Inc.\u00bb (punto adicional al final). Se tratan como empresas diferentes.<\/li>\n<li>Actualizar el nombre de una empresa puede suponer actualizar muchos registros.<\/li>\n<\/ul>\n<p>La soluci\u00f3n de SQL es crear una tabla de <em>empresas<\/em> y asociar una empresa a una persona utilizando su clave primaria (probablemente un n\u00famero entero). La clave seguir\u00eda siendo la misma independientemente de los cambios de nombre de la empresa y la base de datos puede aplicar reglas para garantizar la integridad de los datos.<\/p>\n<p>En MongoDB se fomenta la desnormalizaci\u00f3n. Deber\u00edas repetir activamente los datos y un solo documento podr\u00eda contener toda la informaci\u00f3n necesaria. Esto tiene varias ventajas:<\/p>\n<ul>\n<li>Los documentos son autocontenidos y m\u00e1s f\u00e1ciles de leer\u00a0\u2014\u00a0no hay necesidad de hacer referencia a otras colecciones.<\/li>\n<li>El rendimiento de la escritura puede ser m\u00e1s r\u00e1pido que el de una base de datos SQL porque se aplican menos reglas de integridad de los datos.<\/li>\n<li>La fragmentaci\u00f3n \u2014 o distribuci\u00f3n de los datos en varias m\u00e1quinas \u2014 es m\u00e1s f\u00e1cil porque no es necesario hacer referencia a los datos de otras colecciones.<\/li>\n<\/ul>\n<h2>Consultas Simples en MongoDB<\/h2>\n<p>Puedes listar todos los documentos de una colecci\u00f3n, como el de persona, utilizando un find() vac\u00edo:<\/p>\n<pre><code class=\"language-bash\">db.person.find({})<\/code><\/pre>\n<p>El <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/command\/count\/\">m\u00e9todo count()<\/a> devuelve el n\u00famero de documentos (en nuestro caso, ese n\u00famero ser\u00e1 7):<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).count();<\/code><\/pre>\n<p>El <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/update\/sort\/\">m\u00e9todo sort()<\/a> devuelve los documentos en el orden que prefieras, por ejemplo, por\u00a0 orden alfab\u00e9tico inverso del nombre:<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: -1 });<\/code><\/pre>\n<p>Tambi\u00e9n puedes limitar el n\u00famero de documentos devueltos, por ejemplo, encontrar los tres primeros nombres:<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: 1 }).limit(2);<\/code><\/pre>\n<p>Puedes buscar registros espec\u00edficos definiendo una consulta con uno o varios campos, por ejemplo, localizar todos los documentos de personas cuyo nombre sea \u00abClaire\u00bb:<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name: 'Claire' });<\/code><\/pre>\n<p>Tambi\u00e9n se admiten <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/\">operadores l\u00f3gicos<\/a> como $and, $or, $not, $gt (mayor que), $lt (menor que) y $ne (no igual), por ejemplo, localizar todos los documentos de persona en los que la empresa sea \u00abAlpha Inc\u00bb o \u00abBeta Inc\u00bb:<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  $or: [\n    { company: 'Alpha Inc' },\n    { company: 'Beta Inc' }\n  ]\n});<\/code><\/pre>\n<p>En la base de datos del ejemplo, el mismo resultado podr\u00eda conseguirse con $nin (no en) para extraer todos los documentos en los que la empresa <strong>no<\/strong> sea \u00abGamma Inc\u00bb:<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  company: { $nin: ['Gamma Inc'] }\n});<\/code><\/pre>\n<p>Un segundo objeto valor en el m\u00e9todo find() establece una <em>proyecci\u00f3n<\/em> que define los campos devueltos. En este ejemplo, s\u00f3lo se devuelve el nombre (ten en cuenta que siempre se devuelve el _id del documento, a menos que se desactive expl\u00edcitamente):<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  { name:'Claire' },\n  { _id:0, name:1 }\n);<\/code><\/pre>\n<p>El resultado:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Claire\"\n}<\/code><\/pre>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/elemMatch\/\" target=\"_blank\" rel=\"noopener noreferrer\"> consulta $elemMatch<\/a> te permite encontrar elementos en un array, como por ejemplo todos los documentos en los que el array de tel\u00e9fonos tiene un elemento de trabajo. El mismo $elemMatch puede utilizarse en la proyecci\u00f3n para mostrar s\u00f3lo el n\u00famero de trabajo:<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  {\n    telephone: { $elemMatch: { work: { $exists: true }} }\n  },\n  {\n    _id: 0,\n    name:1,\n    telephone: { $elemMatch: { work: { $exists: true }}}\n  }\n);<\/code><\/pre>\n<p>El resultado:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"telephone\" : [\n    { \"work\" : \"9876543210\" }\n  ]\n},\n{\n  \"name\" : \"Henry\",\n  \"telephone\" : [\n    { \"work\" : \"012301230123\" }\n  ]\n}<\/code><\/pre>\n<h2>Uso de Cursores en MongoDB<\/h2>\n<p>La mayor\u00eda de los controladores de bases de datos permiten devolver los resultados de una consulta como un conjunto o una estructura de datos similar. Sin embargo, si ese conjunto contiene miles de documentos, esto podr\u00eda provocar problemas de memoria.<\/p>\n<p>Como la mayor\u00eda de las bases de datos SQL, MongoDB admite el concepto de <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-cursor\/\" target=\"_blank\" rel=\"noopener noreferrer\">cursores<\/a>. Los cursores permiten a una aplicaci\u00f3n leer los resultados de la consulta de uno en uno antes de pasar al siguiente elemento o abandonar la b\u00fasqueda.<\/p>\n<p>Los cursores tambi\u00e9n pueden utilizarse desde un shell de MongoDB:<\/p>\n<pre><code class=\"language-bash\">let myCursor = db.person.find( {} );\n\nwhile ( myCursor.hasNext() ) {\n  print(tojson( myCursor.next() ));\n}<\/code><\/pre>\n<h2>C\u00f3mo Crear \u00cdndices en MongoDB<\/h2>\n<p>La colecci\u00f3n de personas contiene actualmente siete documentos, por lo que cualquier consulta no ser\u00e1 computacionalmente cara. Sin embargo, imagina que tienes un mill\u00f3n de contactos con un nombre y una direcci\u00f3n de correo electr\u00f3nico. Los contactos pueden estar ordenados por nombre, pero las direcciones de correo electr\u00f3nico estar\u00e1n en un orden aparentemente aleatorio.<\/p>\n<p>Si necesitas buscar un contacto por su correo electr\u00f3nico, la base de datos tendr\u00eda que buscar hasta un mill\u00f3n de elementos antes de encontrar una coincidencia. Al a\u00f1adir un \u00edndice en el campo de correo electr\u00f3nico se crea una \u00abtabla\u00bb de b\u00fasqueda en la que los correos electr\u00f3nicos se almacenan por orden alfab\u00e9tico. Ahora la base de datos puede utilizar algoritmos de b\u00fasqueda m\u00e1s eficaces para localizar a la persona correcta.<\/p>\n<p>Los \u00edndices se vuelven esenciales a medida que aumenta el n\u00famero de documentos. En general, debes aplicar un \u00edndice a cualquier campo al que se pueda hacer referencia en una consulta. <em>Podr\u00edas<\/em> aplicar \u00edndices a todos los campos, pero ten en cuenta que esto ralentizar\u00eda la actualizaci\u00f3n de los datos y aumentar\u00eda el espacio de disco necesario, ya que ser\u00eda necesario reindexar.<\/p>\n<p>MongoDB ofrece una serie de tipos de \u00edndices.<\/p>\n<h3>\u00cdndices de Un Solo Campo<\/h3>\n<p>La mayor\u00eda de los \u00edndices se aplicar\u00e1n a campos \u00fanicos, por ejemplo, indexar el campo nombre en orden alfab\u00e9tico ascendente:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex({ name: 1 });<\/code><\/pre>\n<p>El uso de -1 invierte el orden. Esto ser\u00eda poco beneficioso en nuestro ejemplo, pero podr\u00eda ser pr\u00e1ctico si tienes un campo de fecha en el que tienen prioridad los eventos m\u00e1s recientes.<\/p>\n<p>Otros tres \u00edndices son \u00fatiles en la base de datos de ejemplo de mongodemo:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { company: 1 } );\ndb.company.createIndex( { name: 1 } );\ndb.company.createIndex( { base: 1 } );<\/code><\/pre>\n<h3>\u00cdndices Compuestos sobre M\u00faltiples Campos<\/h3>\n<p>Se pueden especificar dos o m\u00e1s campos en un \u00edndice, por ejemplo:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: 1, company: 1 } );<\/code><\/pre>\n<p>Esto puede ser \u00fatil cuando un campo se utiliza habitualmente junto con otro en las consultas de b\u00fasqueda.<\/p>\n<h3>\u00cdndices Multiclave sobre un Array o Elementos de Objetos<\/h3>\n<p>Los documentos pueden ser complejos y a menudo es necesario indexar campos m\u00e1s profundos en la estructura, como el n\u00famero de tel\u00e9fono del trabajo:<\/p>\n<pre><code class=\"language-bash\">db.products.createIndex( { 'telephone.work': 1 } );<\/code><\/pre>\n<h3>\u00cdndices Wildcard<\/h3>\n<p>Un wildcard puede indexar todos los campos de un documento. Esto suele ser pr\u00e1ctico en documentos m\u00e1s peque\u00f1os y sencillos que pueden consultarse de diversas maneras:<\/p>\n<pre><code class=\"language-bash\">db.company.createIndex( { '$**': 1 } );<\/code><\/pre>\n<h3>\u00cdndices de Texto Completo<\/h3>\n<p>Un \u00edndice de texto te permite crear consultas similares a las de un motor de b\u00fasqueda que pueden examinar el texto en todos los campos de la cadena y ordenarlo por relevancia. Puedes limitar el \u00edndice de texto a campos espec\u00edficos:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: \"text\", company: \"text\" } );<\/code><\/pre>\n<p>&#8230;o crear un \u00edndice de texto en todos los campos de cadena:<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { \"$**\": \"text\" } );<\/code><\/pre>\n<p>El <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/text-search\/\" target=\"_blank\" rel=\"noopener noreferrer\"> operador $texto<\/a> te permite buscar en este \u00edndice, como por ejemplo encontrar todos los documentos en los que se hace referencia a \u00abGamma\u00bb:<\/p>\n<pre><code class=\"language-bash\">db.person.find({ $text: { $search: 'Gamma' } });<\/code><\/pre>\n<p>Ten en cuenta que las b\u00fasquedas de texto completo suelen requerir cinco o m\u00e1s caracteres para obtener resultados \u00fatiles.<\/p>\n<h3>Otros Tipos de \u00cdndices<\/h3>\n<p>MongoDB proporciona otros tipos de \u00edndices especializados:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/index-hashed\/\" target=\"_blank\" rel=\"noopener noreferrer\">hashed index<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2dsphere\/\" target=\"_blank\" rel=\"noopener noreferrer\">2d-index<\/a> \u2013 puntos en un plano bidimensional<\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2d\/\" target=\"_blank\" rel=\"noopener noreferrer\">2dsphere-index<\/a> \u2013 geometr\u00edas en una esfera similar a la Tierra<\/li>\n<\/ul>\n<h2>C\u00f3mo Gestionar los \u00cdndices de MongoDB<\/h2>\n<p>Los \u00edndices definidos en una colecci\u00f3n se pueden examinar con:<\/p>\n<pre><code class=\"language-bash\">db.person.getIndexes();<\/code><\/pre>\n<p>Esto devuelve un array de resultados como:<\/p>\n<pre><code class=\"language-bash\">[\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"_id\" : 1.0 },\n    \"name\" : \"_id_\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"company\" : 1.0 },\n    \"name\" : \"company_1\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"name\" : 1.0 },\n    \"name\" : \"name_1\"\n  }\n]<\/code><\/pre>\n<p>La \u00abclave\u00bb define el campo y el orden, mientras que \u00abnombre\u00bb es un identificador \u00fanico para ese \u00edndice, como \u00abcompany_1\u00bb para el \u00edndice del campo company.<\/p>\n<p>La eficacia de un \u00edndice puede examinarse a\u00f1adiendo un <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.explain\/\" target=\"_blank\" rel=\"noopener noreferrer\"> m\u00e9todo .explain()<\/a> a cualquier consulta, por ejemplo:<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name:'Claire' }).explain();<\/code><\/pre>\n<p>Esto devuelve un gran conjunto de datos, pero el objeto \u00abwinningPlan\u00bb muestra el \u00abindexName\u00bb utilizado en la consulta:<\/p>\n<pre><code class=\"language-bash\">\"winningPlan\" : {\n  \"stage\" : \"FETCH\",\n  \"inputStage\" : {\n    \"stage\" : \"IXSCAN\",\n    \"keyPattern\" : { \"name\" : 1.0 },\n    \"indexName\" : \"name_1\",\n  }\n}<\/code><\/pre>\n<p>Si es necesario, puedes eliminar un \u00edndice haciendo referencia a su nombre:<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex( 'name_1' );<\/code><\/pre>\n<p>o utilizando el documento de especificaci\u00f3n del \u00edndice:<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex({ name: 1 });<\/code><\/pre>\n<p>El <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.dropIndexes\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todo dropIndexes()<\/a> te permite eliminar m\u00e1s de un \u00edndice en un solo comando.<\/p>\n<h2>Uso de los Esquemas de Validaci\u00f3n de Datos de MongoDB<\/h2>\n<p>A diferencia de SQL, los esquemas de definici\u00f3n de datos no son necesarios en MongoDB. Puedes enviar cualquier dato a cualquier documento de cualquier colecci\u00f3n en cualquier momento.<\/p>\n<p>Esto proporciona una libertad considerable. Sin embargo, puede haber ocasiones en las que quieras insistir en que se sigan las reglas. Por ejemplo, no deber\u00eda ser posible insertar un documento en la colecci\u00f3n de personas si no contiene un nombre.<\/p>\n<p>Las reglas de validaci\u00f3n pueden especificarse mediante un <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/jsonSchema\/\" target=\"_blank\" rel=\"noopener noreferrer\"> objeto $jsonSchema<\/a> que define un array de elementos requeridos y las propiedades de cada campo validado. La colecci\u00f3n de personas ya ha sido creada, pero a\u00fan puedes definir un esquema que especifique que se requiere una cadena de nombre:<\/p>\n<pre><code class=\"language-bash\">db.runCommand({\n  collMod: 'person',\n  validator: {\n    $jsonSchema: {\n      required: [ 'name' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n        }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>Intenta insertar un documento de persona sin nombre:<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne({ company: 'Alpha Inc' });<\/code><\/pre>\n<p>&#8230;y el comando fallar\u00e1:<\/p>\n<pre><code class=\"language-bash\">{\n  \"index\" : 0.0,\n  \"code\" : 121.0,\n  \"errmsg\" : \"Document failed validation\",\n  \"op\" : {\n      \"_id\" : ObjectId(\"624591771658cd08f8290401\"),\n      \"company\" : \"Alpha Inc\"\n  }\n}<\/code><\/pre>\n<p>Los esquemas tambi\u00e9n pueden definirse si <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.createCollection\/\" target=\"_blank\" rel=\"noopener noreferrer\">creas una colecci\u00f3n<\/a> antes de utilizarla. El siguiente comando implementa las mismas reglas que el anterior:<\/p>\n<pre><code class=\"language-bash\">db.createCollection('person', {\n  validator: {\n    $jsonSchema: {\n        required: [ 'name' ],\n        properties: {\n          name: {\n          bsonType: 'string',\n          description: 'name string required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>Este ejemplo m\u00e1s complejo crea una colecci\u00f3n de usuarios que valida que se proporcione un nombre, una direcci\u00f3n de correo electr\u00f3nico y al menos un n\u00famero de tel\u00e9fono:<\/p>\n<pre><code class=\"language-bash\">db.createCollection('users', {\n  validator: {\n    $jsonSchema: {\n      required: [ 'name', 'email', 'telephone' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n          },\n          email: {\n        bsonType: 'string',\n          pattern: '^.+@.+$',\n          description: 'valid email required'\n          },\n        telephone: {\n          bsonType: 'array',\n          minItems: 1,\n          description: 'at least one telephone number required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<h2>C\u00f3mo Actualizar Documentos Existentes en MongoDB<\/h2>\n<p>MongoDB ofrece varios <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/update-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todos de actualizaci\u00f3n<\/a>, como <code>updateOne()<\/code>, <code>updateMany()<\/code> y <code>replaceOne()<\/code>. Estos se pasan:<\/p>\n<ul>\n<li>Un objeto filtro que localiza los documentos a actualizar<\/li>\n<li>Un objeto de actualizaci\u00f3n \u2014 o un array de objetos de actualizaci\u00f3n\u00a0\u2014 que describa los datos a modificar<\/li>\n<li>Un objeto de opciones opcional. La propiedad m\u00e1s \u00fatil es upsert, que puede insertar un nuevo documento si no se encuentra ninguno.<\/li>\n<\/ul>\n<p>El siguiente ejemplo actualiza el documento de persona en el que el nombre se establece como \u00abHenry\u00bb. Elimina el n\u00famero de tel\u00e9fono del trabajo, a\u00f1ade un n\u00famero de tel\u00e9fono de casa y establece una nueva fecha de nacimiento:<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Henry' },\n  [\n    { $unset: [ 'telephone.work' ] },\n    { $set: {\n      'birthdate': new ISODate('1980-01-01'),\n      'telephone': [ { 'home': '789789789' } ]\n    } }\n  ]\n);<\/code><\/pre>\n<p>El siguiente ejemplo actualiza el documento de persona en el que el nombre es \u00abIan\u00bb. Ese nombre no existe actualmente, pero al establecer upsert a \u00abtrue\u00bb se crea:<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Ian' },\n  { $set: { company: 'Beta Inc' } },\n  { upsert: true }\n);<\/code><\/pre>\n<p>Puedes ejecutar comandos de consulta para examinar las actualizaciones de datos en cualquier momento.<\/p>\n<h2>C\u00f3mo Eliminar Documentos en MongoDB<\/h2>\n<p>El ejemplo de actualizaci\u00f3n anterior utiliz\u00f3 $unset para eliminar el n\u00famero de tel\u00e9fono del trabajo del documento con el nombre \u00abHenry\u00bb. Para eliminar un documento completo, puedes utilizar uno de los diversos <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/delete-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9todos de eliminaci\u00f3n<\/a>, como <code>deleteOne()<\/code>, <code>deleteMany()<\/code> y <code>remove()<\/code> (que pueden eliminar uno o varios).<\/p>\n<p>El documento reci\u00e9n creado para Ian se puede eliminar con un filtro adecuado:<\/p>\n<pre><code class=\"language-bash\">db.person.deleteOne({ name: 'Ian' });<\/code><\/pre>\n<h2>Uso de las Operaciones de Agregaci\u00f3n en MongoDB<\/h2>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/aggregation\/\" target=\"_blank\" rel=\"noopener noreferrer\">agregaci\u00f3n<\/a> es potente, pero puede ser dif\u00edcil de comprender. Define una serie \u2014 o <em>pipeline \u2014<\/em> de operaciones en un array. Cada etapa de esa pipeline <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/meta\/aggregation-quick-reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">realiza una operaci\u00f3n<\/a> como filtrar, agrupar, calcular o modificar un conjunto de documentos. Una etapa tambi\u00e9n puede utilizar un comportamiento similar al de SQL JOIN con una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/lookup\/\" target=\"_blank\" rel=\"noopener noreferrer\"> operaci\u00f3n $lookup<\/a>. Los documentos resultantes se pasan a la siguiente etapa de la cadena para su posterior procesamiento, seg\u00fan sea necesario.<\/p>\n<p>La mejor forma de ilustrar la agregaci\u00f3n es con un ejemplo. Construiremos paso a paso una consulta que devuelva el nombre, la empresa y el n\u00famero de tel\u00e9fono del trabajo (si est\u00e1 disponible) de cualquier persona que trabaje para una organizaci\u00f3n con sede en EE.UU.<\/p>\n<p>La primera operaci\u00f3n ejecuta un $match para filtrar las empresas con sede en EEUU:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } }\n]);<\/code><\/pre>\n<p>Esto devuelve:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\"\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\"\n}<\/code><\/pre>\n<p>Podemos a\u00f1adir un nuevo operador pipeline $lookup que haga coincidir el nombre de la empresa (localField) con la empresa (foreignField) en la colecci\u00f3n de personas (from). El resultado se a\u00f1adir\u00e1 como una matriz de empleados al documento de cada empresa:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: {\n      from: 'person',\n      localField: 'name',\n      foreignField: 'company',\n            as: 'employee'\n          }\n        }\n]);<\/code><\/pre>\n<p>Y este es el resultado:<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n      \"name\" : \"Abdul\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"0123456789\" },\n        { \"work\" : \"9876543210\" }\n      ]\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n      \"name\" : \"Dawn\",\n      \"company\" : \"Alpha Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n      \"name\" : \"Henry\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"789789789\" }\n      ],\n    }\n  ]\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n      \"name\" : \"Brian\",\n      \"company\" : \"Beta Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n      \"name\" : \"Esther\",\n      \"company\" : \"Beta Inc\",\n      \"telephone\" : [\n       { \"home\" : \"001122334455\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n<p>Una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/project\/#mongodb-pipeline-pipe.-project\" target=\"_blank\" rel=\"noopener noreferrer\">operaci\u00f3n $proyecto (proyecci\u00f3n)<\/a> puede ahora eliminar todo, excepto el array de empleados. A esto le sigue una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/unwind\/#mongodb-pipeline-pipe.-unwind\" target=\"_blank\" rel=\"noopener noreferrer\">operaci\u00f3n $unwind<\/a> para destruir el array y obtener los documentos de los empleados por separado:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' }\n]);<\/code><\/pre>\n<p>El resultado:<\/p>\n<pre><code class=\"language-bash\">{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n    \"name\" : \"Abdul\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"0123456789\" },\n      { \"work\" : \"9876543210\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n    \"name\" : \"Dawn\",\n    \"company\" : \"Alpha Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n    \"name\" : \"Henry\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"789789789\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n    \"name\" : \"Brian\",\n    \"company\" : \"Beta Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n    \"name\" : \"Esther\",\n    \"company\" : \"Beta Inc\",\n    \"telephone\" : [\n      { \"home\" : \"001122334455\" }\n    ]\n  }\n}<\/code><\/pre>\n<p>Por \u00faltimo, se utiliza una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/replaceRoot\/#mongodb-pipeline-pipe.-replaceRoot\" target=\"_blank\" rel=\"noopener noreferrer\"> operaci\u00f3n $replaceRoot<\/a> para formatear cada documento de modo que s\u00f3lo se devuelva el nombre de la persona, la empresa y el n\u00famero de tel\u00e9fono del trabajo. A esto le sigue una operaci\u00f3n <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/sort\/#mongodb-pipeline-pipe.-sort\" target=\"_blank\" rel=\"noopener noreferrer\">$sort<\/a> para obtener los documentos en orden ascendente de nombre. La consulta agregada completa:<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' },\n  { $replaceRoot: {\n    newRoot: {\n      $mergeObjects: [ {\n        name: \"$employee.name\",\n        company: '$employee.company',\n        work: { $first: '$employee.telephone.work' }\n      }, \"$name\" ]\n   } } },\n  { $sort: { name: 1 } }\n]);<\/code><\/pre>\n<p>El resultado:<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"company\" : \"Alpha Inc\",\n  \"work\" : \"9876543210\"\n}\n{\n  \"name\" : \"Brian\",\n  \"company\" : \"Beta Inc\",\n}\n{\n  \"name\" : \"Dawn\",\n  \"company\" : \"Alpha Inc\",\n}\n{\n  \"name\" : \"Esther\",\n  \"company\" : \"Beta Inc\"\n}\n{\n  \"name\" : \"Henry\",\n  \"company\" : \"Alpha Inc\"\n}<\/code><\/pre>\n<p>Hay otras formas de conseguir este resultado, pero el punto clave es que MongoDB puede hacer la mayor parte del trabajo. Rara vez es necesario leer los documentos y manipular los datos en el c\u00f3digo de tu aplicaci\u00f3n directamente.<\/p>\n<h2>C\u00f3mo Ejecutar Operaciones Masivas en MongoDB<\/h2>\n<p>Por defecto, MongoDB puede manejar 1.000 operaciones concurrentes. Es poco probable que esto suponga un problema mientras se utiliza MongoDB, pero las aplicaciones pueden alcanzar este l\u00edmite si realizan una serie de manipulaciones de datos en registros individuales. Las aplicaciones Node.js son especialmente problem\u00e1ticas porque pueden emitir r\u00e1pidamente una serie de peticiones as\u00edncronas sin tener que esperar a que se completen.<\/p>\n<p>Para eludir este problema, MongoDB proporciona una <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-bulk\/\" target=\"_blank\" rel=\"noopener noreferrer\">API de operaciones masivas<\/a> que acepta cualquier n\u00famero de actualizaciones que pueden ejecutarse en orden o en cualquier orden.<\/p>\n<p>Aqu\u00ed tienes un ejemplo de pseudoc\u00f3digo en Node.js:<\/p>\n<pre><code class=\"language-bash\">\/\/ reference the mycollection collection\nconst bulk = db.collection('mycollection').initializeUnorderedBulkOp();\n\n\/\/ make any number of data changes\nbulk.insertOne(...);\nbulk.insertMany(...)\nbulk.updateOne(...);\nbulk.deleteOne(...);\n\/\/ etc...\n\nbulk.execute();<\/code><\/pre>\n<p>La \u00faltima sentencia emite efectivamente una \u00fanica petici\u00f3n a MongoDB, por lo que tienes menos posibilidades de llegar a ese l\u00edmite de 1.000 operaciones.<br \/>\n<\/p>\n<h2>Resumen<\/h2>\n<p>MongoDB proporciona un almac\u00e9n flexible para aplicaciones como los sistemas de gesti\u00f3n de contenidos, las libretas de direcciones y las redes sociales, donde las estructuras de datos estrictas son demasiado r\u00edgidas y dif\u00edciles de definir. Las escrituras de datos son r\u00e1pidas y la fragmentaci\u00f3n en varios servidores es m\u00e1s f\u00e1cil.<\/p>\n<p>Escribir aplicaciones utilizando una base de datos MongoDB tambi\u00e9n puede ser liberador. Es posible almacenar cualquier dato en cualquier documento de cualquier colecci\u00f3n en cualquier momento. Esto es especialmente pr\u00e1ctico cuando est\u00e1s desarrollando un prototipo o un Producto M\u00ednimo Viable utilizando metodolog\u00edas \u00e1giles en las que los requisitos evolucionan con el tiempo.<\/p>\n<p>Dicho esto, las consultas complejas pueden ser un reto y los conceptos de desnormalizaci\u00f3n son dif\u00edciles de aceptar cuando se est\u00e1 migrando desde el mundo SQL.<\/p>\n<p>MongoDB es menos adecuado para las aplicaciones que tienen requisitos transaccionales estrictos en los que la integridad de los datos es esencial, como ocurre con los sistemas bancarios, de contabilidad y de control de existencias. Estos tienen campos de datos identificables que deben dise\u00f1arse antes de comenzar la codificaci\u00f3n.<\/p>\n<p>Hay muchos tipos de aplicaciones entre estos dos extremos, por lo que elegir una base de datos adecuada se hace m\u00e1s dif\u00edcil. Afortunadamente, las bases de datos NoSQL, como MongoDB, han empezado a adoptar opciones similares a las de SQL, como los JOIN y las transacciones.<\/p>\n<p>A la inversa, las bases de datos SQL, como MySQL y PostgreSQL, ofrecen ahora campos de datos JSON similares a los de NoSQL. Tambi\u00e9n pueden merecer tu atenci\u00f3n, pero como siempre, la elecci\u00f3n final es tuya.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este tutorial te introduce en la base de datos MongoDB. Descubrir\u00e1s c\u00f3mo instalar el software, manipular los datos y aplicar las t\u00e9cnicas de dise\u00f1o de datos &#8230;<\/p>\n","protected":false},"author":188,"featured_media":55671,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[622,790,856,1067,1111],"topic":[1267],"class_list":["post-53617","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-database-management-tool","tag-development","tag-mongodb","tag-nosql","topic-adminer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto<\/title>\n<meta name=\"description\" content=\"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto\" \/>\n<meta property=\"og:description\" content=\"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-27T07:04:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-16T18:42:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto\",\"datePublished\":\"2022-06-27T07:04:09+00:00\",\"dateModified\":\"2025-12-16T18:42:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\"},\"wordCount\":4514,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\",\"keywords\":[\"database\",\"database management tool\",\"development\",\"MongoDB\",\"NoSQL\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\",\"url\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\",\"name\":\"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\",\"datePublished\":\"2022-06-27T07:04:09+00:00\",\"dateModified\":\"2025-12-16T18:42:38+00:00\",\"description\":\"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adminer\",\"item\":\"https:\/\/kinqsta.com\/es\/secciones\/adminer\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/es\/#website\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinqsta.com\/es\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto","description":"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.","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:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/","og_locale":"es_ES","og_type":"article","og_title":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto","og_description":"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.","og_url":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-06-27T07:04:09+00:00","article_modified_time":"2025-12-16T18:42:38+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","type":"image\/jpeg"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.","twitter_image":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","twitter_creator":"@craigbuckler","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Craig Buckler","Tiempo de lectura":"24 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto","datePublished":"2022-06-27T07:04:09+00:00","dateModified":"2025-12-16T18:42:38+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/"},"wordCount":4514,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","keywords":["database","database management tool","development","MongoDB","NoSQL"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/","url":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/","name":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","datePublished":"2022-06-27T07:04:09+00:00","dateModified":"2025-12-16T18:42:38+00:00","description":"Las soluciones de bases de datos de c\u00f3digo abierto est\u00e1n de moda. En esta gu\u00eda, examinamos MongoDB y te ayudamos a decidir si es adecuado para tu proyecto.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#primaryimage","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/06\/que-es-mongodb.jpeg","width":1460,"height":730,"caption":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto"},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/es\/blog\/que-es-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Adminer","item":"https:\/\/kinqsta.com\/es\/secciones\/adminer\/"},{"@type":"ListItem","position":3,"name":"\u00bfQu\u00e9 Es MongoDB? Todo Sobre la Popular Base de Datos de C\u00f3digo Abierto"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/es\/#website","url":"https:\/\/kinqsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinqsta.com\/es\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/53617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/comments?post=53617"}],"version-history":[{"count":11,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/53617\/revisions"}],"predecessor-version":[{"id":81428,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/53617\/revisions\/81428"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/translations\/es"},{"href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/53617\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media\/55671"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media?parent=53617"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/tags?post=53617"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/topic?post=53617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}