{"id":59159,"date":"2022-11-08T10:00:09","date_gmt":"2022-11-08T09:00:09","guid":{"rendered":"https:\/\/kinqsta.com\/es\/?p=59159&#038;preview=true&#038;preview_id=59159"},"modified":"2025-01-17T14:44:10","modified_gmt":"2025-01-17T13:44:10","slug":"crear-base-de-datos-mongodb","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/","title":{"rendered":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer"},"content":{"rendered":"<p>En funci\u00f3n de los requisitos de tu software, puedes priorizar la flexibilidad, la escalabilidad, el rendimiento o la velocidad. De ah\u00ed que los desarrolladores y las empresas se confunden a menudo al elegir una base de datos para sus necesidades. Si necesitas una base de datos que proporcione una gran flexibilidad y escalabilidad, y la agregaci\u00f3n de datos para el an\u00e1lisis de los clientes, \u00a1MongoDB puede ser la m\u00e1s adecuada para ti!<\/p>\n\n<p>En este art\u00edculo, hablaremos de la estructura de la base de datos MongoDB y de c\u00f3mo crear, supervisar y gestionar tu base de datos. Empecemos.<\/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>\u00bfC\u00f3mo Est\u00e1 Estructurada la Base de Datos de MongoDB?<\/h2>\n<p>MongoDB es una base de datos NoSQL sin esquema. Esto significa que no se especifica una estructura para las tablas\/bases de datos como se hace con las bases de datos SQL.<\/p>\n<p>\u00bfSab\u00edas que las bases de datos NoSQL son en realidad m\u00e1s r\u00e1pidas que las bases de datos <a href=\"https:\/\/kinqsta.com\/es\/blog\/mongodb-vs-mysql\/\">relacionales<\/a>? Esto se debe a caracter\u00edsticas como la indexaci\u00f3n, la fragmentaci\u00f3n y los canales de agregaci\u00f3n. MongoDB tambi\u00e9n es conocida por su rapidez en la ejecuci\u00f3n de consultas. Por eso lo prefieren empresas como Google, Toyota y Forbes.<\/p>\n<p>A continuaci\u00f3n, exploraremos algunas caracter\u00edsticas clave de MongoDB.<\/p>\n<h3>Documentos<\/h3>\n<p>MongoDB tiene un modelo de datos de documentos que almacena los datos como documentos JSON. Los documentos se mapean de forma natural con los objetos del c\u00f3digo de la aplicaci\u00f3n, lo que hace m\u00e1s sencillo su uso para los desarrolladores.<\/p>\n<p>En una tabla de base de datos relacional, debes a\u00f1adir una columna para a\u00f1adir un nuevo campo. Eso no ocurre con los campos de un documento JSON. Los campos de un documento JSON pueden variar de un documento a otro, por lo que no se a\u00f1adir\u00e1n a todos los registros de la base de datos.<\/p>\n<p>Los documentos pueden almacenar estructuras como matrices que pueden anidarse para expresar relaciones jer\u00e1rquicas. Adem\u00e1s, MongoDB convierte los documentos en un tipo JSON binario (BSON). Esto garantiza un acceso m\u00e1s r\u00e1pido y una mayor compatibilidad con varios tipos de datos como cadenas, enteros, n\u00fameros booleanos, \u00a1y mucho m\u00e1s!<\/p>\n<h3>Conjuntos de r\u00e9plicas<\/h3>\n<p>Cuando creas una nueva base de datos en MongoDB, el sistema crea autom\u00e1ticamente al menos 2 copias m\u00e1s de tus datos. Estas copias se conocen como \u00ab<a href=\"https:\/\/kinqsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\">conjuntos de r\u00e9plicas<\/a>\u00ab, y replican continuamente los datos entre ellas, garantizando una mayor disponibilidad de tus datos. Tambi\u00e9n ofrecen protecci\u00f3n contra el tiempo de inactividad durante un fallo del sistema o un mantenimiento planificado.<\/p>\n<h3>Colecciones<\/h3>\n<p>Una colecci\u00f3n es un grupo de documentos asociados a una base de datos. Son similares a las tablas de las bases de datos relacionales.<\/p>\n<p>Sin embargo, las colecciones son mucho m\u00e1s flexibles. Por un lado, no dependen de un esquema. En segundo lugar, \u00a1los documentos no tienen por qu\u00e9 ser del mismo tipo de datos!<\/p>\n<p>Para ver una lista de las colecciones que pertenecen a una base de datos, utiliza el comando <code>listCollections<\/code>.<\/p>\n<h3>Tuber\u00edas de agregaci\u00f3n<\/h3>\n<p>Puedes utilizar este marco para agrupar varios operadores y expresiones. Es flexible porque te permite procesar, transformar y analizar datos de cualquier estructura.<\/p>\n<p>Por ello, MongoDB permite flujos de datos r\u00e1pidos y caracter\u00edsticas a trav\u00e9s de 150 operadores y expresiones. Tambi\u00e9n tiene varias etapas, como la etapa de Uni\u00f3n, que re\u00fane de forma flexible los resultados de varias colecciones.<\/p>\n<h3>\u00cdndices<\/h3>\n<p>Puedes indexar cualquier campo de un documento de MongoDB para aumentar su eficacia y mejorar la velocidad de consulta. La indexaci\u00f3n ahorra tiempo al escanear el \u00edndice para limitar los documentos inspeccionados. \u00bfNo es esto mucho mejor que leer todos los documentos de la colecci\u00f3n?<\/p>\n<p>Puedes utilizar varias estrategias de indexaci\u00f3n, incluidos los \u00edndices compuestos en varios campos. Por ejemplo, supongamos que tienes varios documentos que contienen el nombre y los apellidos del empleado en campos separados. Si quieres que se devuelvan el nombre y el apellido, puedes crear un \u00edndice que incluya tanto \u00abApellido\u00bb como \u00abNombre\u00bb. Esto ser\u00eda mucho mejor que tener un \u00edndice sobre \u00abApellidos\u00bb y otro sobre \u00abNombre\u00bb.<\/p>\n<p>Puedes aprovechar herramientas como el Asesor de Rendimiento para comprender mejor qu\u00e9 consulta podr\u00eda beneficiarse de los \u00edndices.<\/p>\n<h3>Fragmentaci\u00f3n<\/h3>\n<p>La fragmentaci\u00f3n distribuye un \u00fanico conjunto de datos en varias bases de datos. Ese conjunto de datos puede almacenarse en varias m\u00e1quinas para aumentar la capacidad total de almacenamiento de un sistema. Esto se debe a que divide los conjuntos de datos m\u00e1s grandes en trozos m\u00e1s peque\u00f1os y los almacena en varios nodos de datos.<\/p>\n<p>MongoDB fragmenta los datos a nivel de colecci\u00f3n, distribuyendo los documentos de una colecci\u00f3n entre los fragmentos de un cl\u00faster. Esto asegura la escalabilidad permitiendo que la arquitectura maneje las aplicaciones m\u00e1s grandes.<\/p>\n<h2>\u00bfC\u00f3mo Crear una Base de Datos MongoDB?<\/h2>\n<p>Primero tendr\u00e1s que instalar el paquete MongoDB adecuado para tu sistema operativo. Dir\u00edgete a la p\u00e1gina <a href=\"https:\/\/www.mongodb.com\/try\/download\/community\">&#8216;Descargar el Servidor de la Comunidad MongoDB<\/a>&#8216;. De las opciones disponibles, selecciona la \u00faltima \u00abversi\u00f3n\u00bb, el formato del \u00abpaquete\u00bb como archivo zip, y la \u00abplataforma\u00bb como tu sistema operativo y haz clic en \u00abDescargar\u00bb como se muestra a continuaci\u00f3n:<\/p>\n<figure id=\"attachment_134838\" aria-describedby=\"caption-attachment-134838\" style=\"width: 594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134838 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Community-Server-Download-Process-1.png\" alt=\"Esta imagen muestra las opciones disponibles: versi\u00f3n, plataforma y paquete al descargar MongoDB Community Server.\" width=\"594\" height=\"814\"><figcaption id=\"caption-attachment-134838\" class=\"wp-caption-text\">Proceso de descarga del servidor comunitario MongoDB. (Fuente de la imagen: <a href=\"https:\/\/www.mongodb.com\/try\/download\/community2\">MongoDB Community Server<\/a>)<\/figcaption><\/figure>\n<p>El proceso es bastante sencillo, as\u00ed que tendr\u00e1s MongoDB instalado en tu sistema en un abrir y cerrar de ojos.<\/p>\n<p>Una vez que hayas realizado la instalaci\u00f3n, abre tu s\u00edmbolo del sistema y escribe <code>mongod -version<\/code> para verificarlo. Si no obtienes la siguiente salida y en su lugar ves una cadena de errores, es posible que tengas que volver a instalarlo:<\/p>\n<figure id=\"attachment_134839\" aria-describedby=\"caption-attachment-134839\" style=\"width: 507px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134839 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Verifying-MongoDB-Version.png\" alt=\"Este es un fragmento de c\u00f3digo para comprobar la versi\u00f3n de MongoDB despu\u00e9s de la instalaci\u00f3n.\" width=\"507\" height=\"287\"><figcaption id=\"caption-attachment-134839\" class=\"wp-caption-text\">Verificando la versi\u00f3n de MongoDB. (Fuente de la imagen: <a href=\"https:\/\/www.configserverfirewall.com\/mongodb\/check-mongodb-version\/\">configserverfirewall<\/a>)<\/figcaption><\/figure>\n<h3>Utilizar el Shell de MongoDB<\/h3>\n<p>Antes de empezar, aseg\u00farate de que<\/p>\n<ul>\n<li>Tu cliente tiene Seguridad de la Capa de Transporte y est\u00e1 en tu <a href=\"https:\/\/docs.atlas.mongodb.com\/security\/ip-access-list\/\">lista de IPs permitidas<\/a>.<\/li>\n<li>Tienes una cuenta de usuario y una contrase\u00f1a en el cl\u00faster MongoDB deseado.<\/li>\n<li>Has instalado MongoDB en tu dispositivo.<\/li>\n<\/ul>\n<h4>Paso 1: Acceder al shell de MongoDB<\/h4>\n<p>Inicia el servidor MongoDB siguiendo las instrucciones de cada sistema operativo. Para Windows, escribe el siguiente comando. Para otros SOs, consulta la documentaci\u00f3n de MongoDB.<\/p>\n<pre><code class=\"language-markdown\">net start MongoDB<\/code><\/pre>\n<p>Esto deber\u00eda dar la siguiente salida:<\/p>\n<figure id=\"attachment_134840\" aria-describedby=\"caption-attachment-134840\" style=\"width: 512px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134840 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/MongoDB-Server-Initialization.png\" alt=\"Ejecutando servidor MongoDB.\" width=\"512\" height=\"179\"><figcaption id=\"caption-attachment-134840\" class=\"wp-caption-text\">Ejecutando servidor MongoDB. (Fuente de la imagen: <a href=\"https:\/\/www.c-sharpcorner.com\/article\/configure-a-windows-service-for-mongodb\/\">c-sharpcorner<\/a>)<\/figcaption><\/figure>\n<p>El comando anterior ha inicializado el servidor MongoDB. Para ejecutarlo, tendremos que escribir <code>mongo<\/code> en el s\u00edmbolo del sistema.<\/p>\n<figure id=\"attachment_134843\" aria-describedby=\"caption-attachment-134843\" style=\"width: 897px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134843 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Running-MongoDB-Server-2.png\" alt=\"Ejecutando el shell de MongoDB.\" width=\"897\" height=\"343\"><figcaption id=\"caption-attachment-134843\" class=\"wp-caption-text\">Ejecutando el shell de MongoDB. (Fuente de la imagen: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-create-database\/\">bmc<\/a>)<\/figcaption><\/figure>\n<p>Aqu\u00ed, en el shell de MongoDB, podemos ejecutar comandos para crear bases de datos, insertar datos, editar datos, emitir comandos administrativos y eliminar datos.<\/p>\n<h4>Paso 2: Crear tu base de datos<\/h4>\n<p>A diferencia de las bases de datos relacionales comunes, MongoDB no tiene un comando de creaci\u00f3n de base de datos. En su lugar, hay una palabra clave llamada <code>use<\/code> que cambia a una base de datos especificada. Si la base de datos no existe, crear\u00e1 una nueva base de datos, si no, la enlazar\u00e1 con la base de datos existente.<\/p>\n<p>Por ejemplo, para iniciar una base de datos llamada \u00abempresa\u00bb, escribe:<\/p>\n<pre><code class=\"language-markdown\">use Company<\/code><\/pre>\n<figure id=\"attachment_134845\" aria-describedby=\"caption-attachment-134845\" style=\"width: 1378px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134845 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Creating-Database-in-MongoDB-1.png\" alt=\"Este es un fragmento de c\u00f3digo para crear una base de datos en MongoDB.\" width=\"1378\" height=\"547\"><figcaption id=\"caption-attachment-134845\" class=\"wp-caption-text\">Crear una base de datos en MongoDB.<\/figcaption><\/figure>\n<p>Puedes escribir <code>db<\/code> para confirmar la base de datos que acabas de crear en tu sistema. Si aparece la nueva base de datos que has creado, te has conectado a ella con \u00e9xito.<\/p>\n<p>Si quieres comprobar las bases de datos existentes, escribe <code>show dbs<\/code> y te devolver\u00e1 todas las bases de datos de tu sistema:<\/p>\n<figure id=\"attachment_134847\" aria-describedby=\"caption-attachment-134847\" style=\"width: 1369px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134847 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Show-Databases-in-MongoDB-1.png\" alt=\"Este es un fragmento de c\u00f3digo para ver las bases de datos existentes en el sistema.\" width=\"1369\" height=\"489\"><figcaption id=\"caption-attachment-134847\" class=\"wp-caption-text\">Ver bases de datos en MongoDB.<\/figcaption><\/figure>\n<p>Por defecto, al instalar MongoDB se crean las bases de datos admin, config y local.<\/p>\n<p>\u00bfTe has dado cuenta de que la base de datos que hemos creado no se muestra? Esto es porque a\u00fan no hemos guardado los valores en la base de datos. Hablaremos de la inserci\u00f3n en la secci\u00f3n de gesti\u00f3n de la base de datos.<\/p>\n<h3>Utilizar la interfaz de usuario de Atlas<\/h3>\n<p>Tambi\u00e9n puedes empezar con el servicio de base de datos de MongoDB, Atlas. Aunque tengas que pagar para acceder a algunas caracter\u00edsticas de Atlas, la mayor\u00eda de las funcionalidades de la base de datos est\u00e1n disponibles con el nivel gratuito. Las funciones del nivel gratuito son m\u00e1s que suficientes para crear una base de datos MongoDB.<\/p>\n<p>Antes de empezar, aseg\u00farate de que:<\/p>\n<ol>\n<li>Tu IP est\u00e1 en la lista permitida.<\/li>\n<li>Tienes una cuenta de usuario y una contrase\u00f1a en el cl\u00faster de MongoDB que quieres utilizar.<\/li>\n<\/ol>\n<p>Para crear una base de datos MongoDB con AtlasUI, abre una ventana del navegador e inicia sesi\u00f3n en <a href=\"https:\/\/cloud.mongodb.com\/\">https:\/\/cloud.mongodb.com<\/a>. En la p\u00e1gina de tu cl\u00faster, haz clic en <strong>Examinar colecciones<\/strong>. Si no hay bases de datos en el cl\u00faster, puedes crear tu base de datos haciendo clic en el bot\u00f3n <strong>A\u00f1adir mis propios datos<\/strong>.<\/p>\n<p>El indicador te pedir\u00e1 que proporciones un nombre de base de datos y de colecci\u00f3n. Una vez que les hayas dado un nombre, haz clic en <strong>Crear<\/strong> y \u00a1ya est\u00e1! Ahora puedes introducir nuevos documentos o conectarte a la base de datos mediante controladores.<\/p>\n<h2>Gestionar Tu base de datos MongoDB<\/h2>\n<p>En esta secci\u00f3n, repasaremos algunas formas ingeniosas de gestionar tu base de datos MongoDB de forma eficaz. Puedes hacerlo utilizando la br\u00fajula de MongoDB o mediante colecciones.<\/p>\n<h3>Utilizando colecciones<\/h3>\n<p>Mientras que las bases de datos relacionales poseen tablas bien definidas con tipos de datos y columnas espec\u00edficas, NoSQL tiene colecciones en lugar de tablas. Estas colecciones no tienen ninguna estructura, y los documentos pueden variar: puedes tener diferentes tipos de datos y campos sin tener que coincidir con el formato de otro documento en la misma colecci\u00f3n.<\/p>\n<p>Para demostrarlo, vamos a crear una colecci\u00f3n llamada \u00abEmpleado\u00bb y a a\u00f1adirle un documento:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {\n   \t\"Employeename\" : \"Chris\",\n   \t\"EmployeeDepartment\" : \"Sales\"\n  }\n)<\/code><\/pre>\n<p>Si la inserci\u00f3n tiene \u00e9xito, devolver\u00e1 <code>WriteResult({ \"nInserted\" : 1 })<\/code>:<\/p>\n<figure id=\"attachment_134848\" aria-describedby=\"caption-attachment-134848\" style=\"width: 1366px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134848 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Successful-Insertion-in-MongoDB.png\" alt=\"Este fragmento de c\u00f3digo devuelve WriteResult({ \" width=\"1366\" height=\"484\"><figcaption id=\"caption-attachment-134848\" class=\"wp-caption-text\">Inserci\u00f3n exitosa en MongoDB.<\/figcaption><\/figure>\n<p>Aqu\u00ed, \u00abdb\u00bb se refiere a la base de datos conectada actualmente. \u00abEmpleado\u00bb es la colecci\u00f3n reci\u00e9n creada en la base de datos de la empresa.<\/p>\n<p>Aqu\u00ed no hemos establecido una clave primaria porque MongoDB crea autom\u00e1ticamente un campo de clave primaria llamado \u00ab_id\u00bb y le asigna un valor por defecto.<\/p>\n<p>Ejecuta el siguiente comando para comprobar la colecci\u00f3n en formato JSON:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.find().forEach(printjson)<\/code><\/pre>\n<p>Salida:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"_id\" : ObjectId(\"63151427a4dd187757d135b8\"),\n  \"Employeename\" : \"Chris\",\n  \"EmployeeDepartment\" : \"Sales\"\n}<\/code><\/pre>\n<p>Aunque el valor \u00ab_id\u00bb se asigna autom\u00e1ticamente, puedes cambiar el valor de la clave primaria por defecto. Esta vez, insertaremos otro documento en la base de datos \u00abEmpleado\u00bb, con el valor \u00ab_id\u00bb como \u00ab1\u00bb:<\/p>\n<pre><code class=\"language-markdown\">db.Employee.insert(\n  {  \n   \t\"_id\" : 1,\n   \t\"EmployeeName\" : \"Ava\",\n   \t\"EmployeeDepartment\" : \"Public Relations\"\n  }\n)<\/code><\/pre>\n<p>Al ejecutar el comando <code>db.Employee.find().forEach(printjson)<\/code> obtenemos la siguiente salida:<\/p>\n<figure id=\"attachment_134851\" aria-describedby=\"caption-attachment-134851\" style=\"width: 1764px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134851 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/Primary-Key-for-Documents-in-Collection-1.png\" alt=\"La salida muestra los documentos de la colecci\u00f3n Empleados junto con su clave primaria\" width=\"1764\" height=\"694\"><figcaption id=\"caption-attachment-134851\" class=\"wp-caption-text\">Documentos en la colecci\u00f3n con su clave primaria.<\/figcaption><\/figure>\n<p>En la salida anterior, el valor \u00ab_id\u00bb de \u00abAva\u00bb se establece en \u00ab1\u00bb en lugar de asignarle un valor autom\u00e1ticamente.<\/p>\n<p>Ahora que hemos a\u00f1adido con \u00e9xito valores a la base de datos, podemos comprobar si aparece en las bases de datos existentes en nuestro sistema mediante el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">show dbs<\/code><\/pre>\n<figure id=\"attachment_134852\" aria-describedby=\"caption-attachment-134852\" style=\"width: 1714px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134852 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/List-of-Databases.png\" alt=\"La salida muestra la colecci\u00f3n de Empleados en las bases de datos existentes en nuestro sistema.\" width=\"1714\" height=\"460\"><figcaption id=\"caption-attachment-134852\" class=\"wp-caption-text\">Visualizando la lista de bases de datos.<\/figcaption><\/figure>\n<p>Y \u00a1voil\u00e1! \u00a1Has creado con \u00e9xito una base de datos en tu sistema!<\/p>\n<h3>Utilizar la br\u00fajula de MongoDB<\/h3>\n<p>Aunque podemos trabajar con servidores MongoDB desde la br\u00fajula de Mongo, a veces puede ser tedioso. Es posible que lo experimentes en un entorno de producci\u00f3n.<\/p>\n<p>Sin embargo, existe una herramienta de br\u00fajula (llamada apropiadamente Compass) creada por MongoDB que puede facilitarlo. Tiene una interfaz gr\u00e1fica de usuario mejor y funcionalidades a\u00f1adidas como la visualizaci\u00f3n de datos, la elaboraci\u00f3n de perfiles de rendimiento y el acceso CRUD (crear, leer, actualizar, eliminar) a los datos, las bases de datos y las colecciones.<\/p>\n<p>Puedes descargar el <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/install\/\">IDE de Compass<\/a> para tu sistema operativo e instalarlo con su sencillo proceso.<\/p>\n<p>A continuaci\u00f3n, abre la aplicaci\u00f3n y crea una conexi\u00f3n con el servidor pegando la cadena de conexi\u00f3n. Si no la encuentras, puedes hacer clic en <strong>Rellenar los campos de conexi\u00f3n individualmente<\/strong>. Si no cambiaste el n\u00famero de puerto al instalar MongoDB, s\u00f3lo tienes que hacer clic en el bot\u00f3n de conexi\u00f3n, \u00a1y ya est\u00e1s dentro! Si no, s\u00f3lo tienes que introducir los valores que hayas establecido y hacer clic en <strong>Conectar<\/strong>.<\/p>\n<figure id=\"attachment_134854\" aria-describedby=\"caption-attachment-134854\" style=\"width: 1384px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-134854 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2022\/10\/New-Connection-Window-in-MongoDB-1.png\" alt=\"Esta imagen muestra la ventana de Nueva Conexi\u00f3n, donde puedes elegir pegar la url de conexi\u00f3n.\" width=\"1384\" height=\"535\"><figcaption id=\"caption-attachment-134854\" class=\"wp-caption-text\">Ventana de nueva conexi\u00f3n en MongoDB.. (Fuente de la imagen: <a href=\"https:\/\/www.mongodb.com\/docs\/compass\/current\/connect\/\">mongodb<\/a>)<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, proporciona el nombre de host, el puerto y la autenticaci\u00f3n en la ventana de nueva conexi\u00f3n.<\/p>\n<p>En MongoDB Compass, puedes crear una base de datos y a\u00f1adir su primera colecci\u00f3n simult\u00e1neamente. As\u00ed es como se hace:<\/p>\n<ol>\n<li>Haz clic en <strong>Crear base de datos<\/strong> para abrir el aviso.<\/li>\n<li>Introduce el nombre de la base de datos y su primera colecci\u00f3n.<\/li>\n<li>Haz clic en <strong>Crear base de datos<\/strong>.<\/li>\n<\/ol>\n<p>Puedes insertar m\u00e1s documentos en tu base de datos haciendo clic en el nombre de tu base de datos, y luego haciendo clic en el nombre de la colecci\u00f3n para ver la pesta\u00f1a <strong>Documentos<\/strong>. A continuaci\u00f3n, puedes hacer clic en el bot\u00f3n <strong>A\u00f1adir datos<\/strong> para insertar uno o varios documentos en tu colecci\u00f3n.<\/p>\n<p>Al a\u00f1adir tus documentos, puedes introducirlos de uno en uno o como m\u00faltiples documentos en una matriz. Si a\u00f1ades varios documentos, aseg\u00farate de que estos documentos separados por comas est\u00e9n encerrados entre corchetes. Por ejemplo:<\/p>\n<pre><code class=\"language-markdown\">{ _id: 1, item: { name: \"apple\", code: \"123\" }, qty: 15, tags: [ \"A\", \"B\", \"C\" ] },\n{ _id: 2, item: { name: \"banana\", code: \"123\" }, qty: 20, tags: [ \"B\" ] },\n{ _id: 3, item: { name: \"spinach\", code: \"456\" }, qty: 25, tags: [ \"A\", \"B\" ] },\n{ _id: 4, item: { name: \"lentils\", code: \"456\" }, qty: 30, tags: [ \"B\", \"A\" ] },\n{ _id: 5, item: { name: \"pears\", code: \"000\" }, qty: 20, tags: [ [ \"A\", \"B\" ], \"C\" ] },\n{ _id: 6, item: { name: \"strawberry\", code: \"123\" }, tags: [ \"B\" ] }<\/code><\/pre>\n<p>Por \u00faltimo, haz clic en <strong>Insertar<\/strong> para a\u00f1adir los documentos a tu colecci\u00f3n. Este es el aspecto que tendr\u00eda el cuerpo de un documento:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"StudentID\" : 1\n  \"StudentName\" : \"JohnDoe\"\n}<\/code><\/pre>\n<p>Aqu\u00ed, los nombres de los campos son \u00abStudentID\u00bb y \u00abStudentName\u00bb. Los valores de los campos son \u00ab1\u00bb y \u00abJohnDoe\u00bb respectivamente.<\/p>\n<h3>Comandos \u00fatiles<\/h3>\n<p>Puedes gestionar estas colecciones mediante los comandos de gesti\u00f3n de roles y de gesti\u00f3n de usuarios.<\/p>\n<h4>Comandos de gesti\u00f3n de usuarios<\/h4>\n<p>Los comandos de gesti\u00f3n de usuarios de MongoDB contienen comandos que pertenecen al usuario. Podemos crear, actualizar y eliminar los usuarios mediante estos comandos.<\/p>\n<h5>dropUser<\/h5>\n<p>Este comando elimina un \u00fanico usuario de la base de datos especificada. A continuaci\u00f3n se muestra la sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.dropUser(username, writeConcern)<\/code><\/pre>\n<p>Aqu\u00ed, <code>username<\/code> es un campo obligatorio que especifica el nombre del usuario a eliminar de la base de datos. El campo opcional <code>writeConcern<\/code> contiene el nivel de preocupaci\u00f3n de escritura para la operaci\u00f3n de eliminaci\u00f3n. El nivel de preocupaci\u00f3n de escritura puede ser determinado por el campo opcional <code>writeConcern<\/code>.<\/p>\n<p>Antes de dar de baja a un usuario que tiene el rol <code>userAdminAnyDatabase<\/code>, aseg\u00farate de que hay al menos otro usuario con privilegios de administraci\u00f3n de usuarios.<\/p>\n<p>En este ejemplo, daremos de baja al usuario \u00abuser26\u00bb en la base de datos de prueba:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000})<\/code><\/pre>\n<p>Salida:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.dropUser(\"user26\", {w: \"majority\", wtimeout: 4000});\ntrue<\/code><\/pre>\n<h5>createUser<\/h5>\n<p>Este comando crea un nuevo usuario para la base de datos especificada de la siguiente manera:<\/p>\n<pre><code class=\"language-markdown\">db.createUser(user, writeConcern)<\/code><\/pre>\n<p>Aqu\u00ed, <code>user<\/code> es un campo obligatorio que contiene el documento con la informaci\u00f3n de autenticaci\u00f3n y acceso del usuario a crear. El campo opcional <code>writeConcern<\/code> contiene el nivel de preocupaci\u00f3n de escritura para la operaci\u00f3n de creaci\u00f3n. El nivel de preocupaci\u00f3n por la escritura puede determinarse mediante el campo opcional <code>writeConcern<\/code>.<\/p>\n<p><code>createUser<\/code> devolver\u00e1 un error de usuario duplicado si el usuario ya existe en la base de datos.<\/p>\n<p>Puedes crear un nuevo usuario en la base de datos de prueba de la siguiente manera:<\/p>\n<pre><code class=\"language-markdown\">use test\ndb.createUser(\n  {\n    user: \"user26\",\n    pwd: \"myuser123\",\n    roles: [ \"readWrite\" ]  \n  }\n);<\/code><\/pre>\n<p>El resultado es el siguiente:<\/p>\n<pre><code class=\"language-markdown\">Successfully added user: { \"user\" : \"user26\", \"roles\" : [ \"readWrite\", \"dbAdmin\" ] }<\/code><\/pre>\n<h5>grantRolesToUser<\/h5>\n<p>Puedes aprovechar este comando para conceder funciones adicionales a un usuario. Para utilizarlo, debes tener en cuenta la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToUser: \"&lt;user&gt;\",\n    roles: [ &lt;roles&gt; ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Puedes especificar tanto los roles definidos por el usuario como los incorporados en los roles mencionados anteriormente. Si quieres especificar un rol que existe en la misma base de datos donde se ejecuta <code>grantRolesToUser<\/code>, puedes especificar el rol con un documento, como se menciona a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-markdown\">{ role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" }<\/code><\/pre>\n<p>O bien, puedes especificar simplemente el rol con el nombre del rol. Por ejemplo:<\/p>\n<pre><code class=\"language-markdown\">\"readWrite\"<\/code><\/pre>\n<p>Si quieres especificar el rol que est\u00e1 presente en una base de datos diferente, tendr\u00e1s que especificar el rol con un documento diferente.<\/p>\n<p>Para conceder un rol en una base de datos, necesitas la acci\u00f3n <code>grantRole<\/code> en la base de datos especificada.<\/p>\n<p>He aqu\u00ed un ejemplo para que te hagas una idea clara. Tomemos, por ejemplo, un usuario productoUsuario00 en la base de datos de productos con los siguientes roles:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  }\n]<\/code><\/pre>\n<p>La operaci\u00f3n <code>grantRolesToUser<\/code> proporciona a \u00abproductoUsuario00\u00bb el rol <code>readWrite<\/code> en la base de datos de existencias y el rol de lectura en la base de datos de productos:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand({\n  grantRolesToUser: \"productUser00\",\n  roles: [\n    { role: \"readWrite\", db: \"stock\"},\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 2000 }\n})<\/code><\/pre>\n<p>El usuario productoUsuario00 en la base de datos de productos posee ahora los siguientes roles:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<h5>usersInfo<\/h5>\n<p>Puedes utilizar el comando <code>usersInfo<\/code> para devolver informaci\u00f3n sobre uno o varios usuarios. Esta es la sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo: &lt;various&gt;,\n    showCredentials: &lt;Boolean&gt;,\n    showCustomData: &lt;Boolean&gt;,\n    showPrivileges: &lt;Boolean&gt;,\n    showAuthenticationRestrictions: &lt;Boolean&gt;,\n    filter: &lt;document&gt;,\n    comment: &lt;any&gt; \n  }\n)\n{ usersInfo: &lt;various&gt; }<\/code><\/pre>\n<p>En t\u00e9rminos de acceso, los usuarios siempre pueden consultar su propia informaci\u00f3n. Para consultar la informaci\u00f3n de otro usuario, el usuario que ejecuta el comando debe tener privilegios que incluyan la acci\u00f3n <code>viewUser<\/code> en la base de datos del otro usuario.<\/p>\n<p>Al ejecutar el comando <code>userInfo<\/code>, puedes obtener la siguiente informaci\u00f3n en funci\u00f3n de las opciones especificadas:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"users\" : [\n    {\n      \"_id\" : \"&lt;db&gt;.&lt;username&gt;\",\n      \"userId\" : &lt;UUID&gt;, \/\/ Starting in MongoDB 4.0.9\n      \"user\" : \"&lt;username&gt;\",\n      \"db\" : \"&lt;db&gt;\",\n      \"mechanisms\" : [ ... ],  \/\/ Starting in MongoDB 4.0\n      \"customData\" : &lt;document&gt;,\n      \"roles\" : [ ... ],\n      \"credentials\": { ... }, \/\/ only if showCredentials: true\n      \"inheritedRoles\" : [ ... ],  \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedPrivileges\" : [ ... ], \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"inheritedAuthenticationRestrictions\" : [ ] \/\/ only if showPrivileges: true or showAuthenticationRestrictions: true\n      \"authenticationRestrictions\" : [ ... ] \/\/ only if showAuthenticationRestrictions: true\n    },\n  ],\n  \"ok\" : 1\n} <\/code><\/pre>\n<p>Ahora que ya tienes una idea general de lo que puedes conseguir con el comando <code>usersInfo<\/code>, la siguiente pregunta obvia que puede surgir es, \u00bfqu\u00e9 comandos ser\u00edan \u00fatiles para consultar usuarios espec\u00edficos y m\u00faltiples usuarios?<\/p>\n<p>Aqu\u00ed tienes dos pr\u00e1cticos ejemplos para ilustrar lo mismo:<br \/>\nPara ver los privilegios y la informaci\u00f3n de usuarios concretos, pero no las credenciales, de un usuario \u00abAnthony\u00bb definido en la base de datos \u00aboficina\u00bb, ejecuta el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    usersInfo:  { user: \"Anthony\", db: \"office\" },\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>Si quieres consultar un usuario de la base de datos actual, s\u00f3lo puedes mencionar al usuario por su nombre. Por ejemplo, si est\u00e1s en la base de datos \u00abcasa\u00bb y existe un usuario llamado \u00abTimothy\u00bb en la base de datos \u00abcasa\u00bb, puedes ejecutar el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"home\").runCommand(\n  {\n    usersInfo:  \"Timothy\",\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<p>A continuaci\u00f3n, puedes utilizar una matriz si quieres consultar la informaci\u00f3n de varios usuarios. Puedes incluir los campos opcionales <code>showCredentials<\/code> y <code>showPrivileges<\/code>, o puedes optar por no incluirlos. Este es el aspecto que tendr\u00eda el comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand({\nusersInfo: [ { user: \"Anthony\", db: \"office\" }, { user: \"Timothy\", db: \"home\" } ],\n  showPrivileges: true\n})<\/code><\/pre>\n<h5>revokeRolesFromUser<\/h5>\n<p>Puedes aprovechar el comando <code>revokeRolesFromUser<\/code> para eliminar uno o varios roles de un usuario en la base de datos en la que est\u00e1n presentes los roles. El comando <code>revokeRolesFromUser<\/code> tiene la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokeRolesFromUser: \"&lt;user&gt;\",\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>En la sintaxis mencionada anteriormente, puedes especificar tanto los roles definidos por el usuario como los incorporados en el campo <code>roles<\/code>. De forma similar al comando <code>grantRolesToUser<\/code>, puedes especificar el rol que quieres revocar en un documento o utilizar su nombre.<\/p>\n<p>Para ejecutar con \u00e9xito el comando <code>revokeRolesFromUser<\/code>, necesitas tener la acci\u00f3n <code>revokeRole<\/code> en la base de datos especificada.<\/p>\n<p>Aqu\u00ed tienes un ejemplo para que quede claro. La entidad <code>productUser00<\/code> de la base de datos de productos ten\u00eda los siguientes roles:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"assetsWriter\",\n    \"db\" : \"assets\"\n  },\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  },\n  {\n    \"role\" : \"read\",\n    \"db\" : \"products\"\n  }\n]<\/code><\/pre>\n<p>El siguiente comando <code>revokeRolesFromUser<\/code> eliminar\u00e1 dos de los roles del usuario: el rol \u00ableer\u00bb de <code>products<\/code> y el rol <code>assetsWriter<\/code> de la base de datos \u00abactivos\u00bb:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand( { revokeRolesFromUser: \"productUser00\",\n  roles: [\n    { role: \"AssetsWriter\", db: \"assets\" },\n    \"read\"\n  ],\n  writeConcern: { w: \"majority\" }\n} )<\/code><\/pre>\n<p>El usuario \u00abproductUser00\u00bb de la base de datos de productos ahora s\u00f3lo tiene un rol restante:<\/p>\n<pre><code class=\"language-markdown\">\"roles\" : [\n  {\n    \"role\" : \"readWrite\",\n    \"db\" : \"stock\"\n  }\n]<\/code><\/pre>\n<h4>Comandos de gesti\u00f3n de roles<\/h4>\n<p>Los roles conceden a los usuarios el acceso a los recursos. Los administradores pueden utilizar varios roles integrados para controlar el acceso a un sistema MongoDB. Si los roles no cubren los privilegios deseados, puedes incluso ir m\u00e1s all\u00e1 y crear nuevos roles en una base de datos concreta.<\/p>\n<h5>dropRole<\/h5>\n<p>Con el comando <code>dropRole<\/code>, puedes eliminar un rol definido por el usuario de la base de datos en la que ejecutas el comando. Para ejecutar este comando, utiliza la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    dropRole: \"&lt;role&gt;\",\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Para que se ejecute con \u00e9xito, debes tener la acci\u00f3n <code>dropRole<\/code> en la base de datos especificada. Las siguientes operaciones eliminar\u00edan el rol <code>writeTags<\/code> de la base de datos \u00abproductos\u00bb:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  {\n    dropRole: \"writeTags\",\n    writeConcern: { w: \"majority\" }\n  }\n)<\/code><\/pre>\n<h5>createRole<\/h5>\n<p>Puedes aprovechar el comando <code>createRole<\/code> para crear un rol y especificar sus privilegios. El rol se aplicar\u00e1 a la base de datos en la que decidas ejecutar el comando. El comando <code>createRole<\/code> devolver\u00e1 un error de rol duplicado si el rol ya existe en la base de datos.<\/p>\n<p>Para ejecutar este comando, sigue la sintaxis dada:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand(\n  {\n    createRole: \"&lt;new role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    roles: [\n      { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" } | \"&lt;role&gt;\",\n    ],\n    authenticationRestrictions: [\n      {\n        clientSource: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...],\n        serverAddress: [\"&lt;IP&gt;\" | \"&lt;CIDR range&gt;\", ...]\n      },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Los privilegios de un rol se aplicar\u00edan a la base de datos donde se cre\u00f3 el rol. El rol puede heredar privilegios de otros roles de su base de datos. Por ejemplo, un rol creado en la base de datos \u00abadmin\u00bb puede incluir privilegios que se apliquen a un cl\u00faster o a todas las bases de datos. Tambi\u00e9n puede heredar privilegios de los roles presentes en otras bases de datos.<\/p>\n<p>Para crear un rol en una base de datos, necesitas dos cosas:<\/p>\n<ol>\n<li>La acci\u00f3n <code>grantRole<\/code> en esa base de datos para mencionar los privilegios para el nuevo rol, as\u00ed como para mencionar los roles de los que heredar.<\/li>\n<li>La acci\u00f3n <code>createRole<\/code> sobre ese recurso de la base de datos.<\/li>\n<\/ol>\n<p>El siguiente comando <code>createRole<\/code> crear\u00e1 un rol <code>clusterAdmin<\/code> en la base de datos de usuarios:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({ createRole: \"clusterAdmin\",\n  privileges: [\n    { resource: { cluster: true }, actions: [ \"addShard\" ] },\n    { resource: { db: \"config\", collection: \"\" }, actions: [ \"find\", \"remove\" ] },\n    { resource: { db: \"users\", collection: \"usersCollection\" }, actions: [ \"update\", \"insert\" ] },\n    { resource: { db: \"\", collection: \"\" }, actions: [ \"find\" ] }\n  ],\n  roles: [\n    { role: \"read\", db: \"user\" }\n  ],\n  writeConcern: { w: \"majority\" , wtimeout: 5000 }\n})<\/code><\/pre>\n<h5>grantRolesToRole<\/h5>\n<p>Con el comando <code>grantRolesToRole<\/code>, puedes conceder funciones a un rol definido por el usuario. El comando <code>grantRolesToRole<\/code> afectar\u00e1 a los roles de la base de datos donde se ejecute el comando.<\/p>\n<p>Este comando <code>grantRolesToRole<\/code> tiene la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    grantRolesToRole: \"&lt;role&gt;\",\n    roles: [\n     { role: \"&lt;role&gt;\", db: \"&lt;database&gt;\" },\n    ],\n    writeConcern: { &lt;write concern&gt; },\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Los privilegios de acceso son similares a los del comando <code>grantRolesToUser<\/code> &#8211; necesitas una acci\u00f3n <code>grantRole<\/code> en una base de datos para la correcta ejecuci\u00f3n del comando.<\/p>\n<p>En el siguiente ejemplo, puedes utilizar el comando <code>grantRolesToRole<\/code> para actualizar el rol <code>productsReader<\/code> en la base de datos \u00abproductos\u00bb para que herede los privilegios del rol <code>productsWriter<\/code>:<\/p>\n<pre><code class=\"language-markdown\">use products\ndb.runCommand(\n  { \n    grantRolesToRole: \"productsReader\",\n    roles: [\n      \"productsWriter\"\n    ],\n    writeConcern: { w: \"majority\" , wtimeout: 5000 }\n  }\n)<\/code><\/pre>\n<h5>revokePrivilegesFromRole<\/h5>\n<p>Puedes utilizar <code>revokePrivilegesFromRole<\/code> para eliminar los privilegios especificados del rol definido por el usuario en la base de datos donde se ejecuta el comando. Para una correcta ejecuci\u00f3n, debes tener en cuenta la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"&lt;role&gt;\",\n    privileges: [\n      { resource: { &lt;resource&gt; }, actions: [ \"&lt;action&gt;\", ... ] },\n    ],\n    writeConcern: &lt;write concern document&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Para revocar un privilegio, el patr\u00f3n \u00abdocumento de recurso\u00bb debe coincidir con el campo \u00abrecurso\u00bb de ese privilegio. El campo \u00abacciones\u00bb puede ser una coincidencia exacta o un subconjunto.<\/p>\n<p>Por ejemplo, considera el rol <code>manageRole<\/code> en la base de datos de productos con los siguientes privilegios que especifican la base de datos \u00abgestores\u00bb como recurso:<\/p>\n<pre><code class=\"language-markdown\">{\n  \"resource\" : {\n    \"db\" : \"managers\",\n    \"collection\" : \"\"\n  },\n  \"actions\" : [\n    \"insert\",\n    \"remove\"\n  ]\n}<\/code><\/pre>\n<p>No puedes revocar las acciones \u00abinsertar\u00bb o \u00abeliminar\u00bb de una sola colecci\u00f3n en la base de datos de los gestores. Las siguientes operaciones no provocan ning\u00fan cambio en el rol:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges: [\n      {\n        resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\",\n          \"remove\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n          db : \"managers\",\n          collection : \"kiosks\"\n        },\n        actions : [\n          \"insert\"\n        ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>Para revocar las acciones \u00abinsertar\u00bb y\/o \u00abeliminar\u00bb del rol <code>manageRole<\/code>, tienes que coincidir exactamente con el documento de recursos. Por ejemplo, la siguiente operaci\u00f3n revoca s\u00f3lo la acci\u00f3n \u00abeliminar\u00bb del privilegio existente:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"manageRole\",\n    privileges:\n      [\n        {\n          resource : {\n            db : \"managers\",\n            collection : \"\"\n        },\n        actions : [ \"remove\" ]\n      }\n    ]\n  }\n)<\/code><\/pre>\n<p>La siguiente operaci\u00f3n eliminar\u00e1 varios privilegios del rol \u00abejecutivo\u00bb en la base de datos de administradores:<\/p>\n<pre><code class=\"language-markdown\">use managers\ndb.runCommand(\n  {\n    revokePrivilegesFromRole: \"executive\",\n    privileges: [\n      {\n        resource: { db: \"managers\", collection: \"\" },\n        actions: [ \"insert\", \"remove\", \"find\" ]\n      },\n      {\n        resource: { db: \"managers\", collection: \"partners\" },\n        actions: [ \"update\" ]\n      }\n    ],\n    writeConcern: { w: \"majority\" }\n    }\n)<\/code><\/pre>\n<h5>rolesInfo<\/h5>\n<p>El comando <code>rolesInfo<\/code> devolver\u00e1 la informaci\u00f3n sobre privilegios y herencia de los roles especificados, incluidos los roles incorporados y los definidos por el usuario. Tambi\u00e9n puedes aprovechar el comando <code>rolesInfo<\/code> para recuperar todos los roles asignados a una base de datos.<\/p>\n<p>Para una correcta ejecuci\u00f3n, sigue esta sintaxis:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: { role: &lt;name&gt;, db: &lt;db&gt; },\n    showPrivileges: &lt;Boolean&gt;,\n    showBuiltinRoles: &lt;Boolean&gt;,\n    comment: &lt;any&gt; \n  }\n)<\/code><\/pre>\n<p>Para devolver la informaci\u00f3n de un rol de la base de datos actual, puedes especificar su nombre de la siguiente manera:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: \"&lt;rolename&gt;\" }<\/code><\/pre>\n<p>Para devolver informaci\u00f3n de un rol de otra base de datos, puedes mencionar el rol con un documento que mencione el rol y la base de datos:<\/p>\n<pre><code class=\"language-markdown\">{ rolesInfo: { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" } }<\/code><\/pre>\n<p>Por ejemplo, el siguiente comando devuelve la informaci\u00f3n de la herencia del rol del ejecutivo definido en la base de datos de los gestores:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: { role: \"executive\", db: \"managers\" }\n   }\n)<\/code><\/pre>\n<p>El siguiente comando devolver\u00e1 la informaci\u00f3n de la herencia de roles: <code>accountManager<\/code> en la base de datos en la que se ejecuta el comando:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n      rolesInfo: \"accountManager\"\n   }\n)<\/code><\/pre>\n<p>El siguiente comando devolver\u00e1 tanto los privilegios como la herencia de roles para el rol \u00abejecutivo\u00bb tal y como est\u00e1 definido en la base de datos de los gestores:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n     rolesInfo: { role: \"executive\", db: \"managers\" },\n     showPrivileges: true\n   }\n)<\/code><\/pre>\n<p>Para mencionar varios roles, puedes utilizar una matriz. Tambi\u00e9n puedes mencionar cada rol en la matriz como una cadena o un documento.<\/p>\n<p>Debes utilizar una cadena s\u00f3lo si el rol existe en la base de datos en la que se ejecuta el comando:<\/p>\n<pre><code class=\"language-markdown\">{\n  rolesInfo: [\n    \"&lt;rolename&gt;\",\n    { role: \"&lt;rolename&gt;\", db: \"&lt;database&gt;\" },\n  ]\n}<\/code><\/pre>\n<p>Por ejemplo, el siguiente comando devolver\u00e1 informaci\u00f3n de tres roles en tres bases de datos diferentes:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n   {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Puedes obtener tanto los privilegios como la herencia de los roles de la siguiente manera:<\/p>\n<pre><code class=\"language-markdown\">db.runCommand(\n  {\n    rolesInfo: [\n      { role: \"executive\", db: \"managers\" },\n      { role: \"accounts\", db: \"departments\" },\n      { role: \"administrator\", db: \"products\" }\n    ],\n    showPrivileges: true\n  }\n)<\/code><\/pre>\n<h2>Incrustar Documentos de MongoDB para Mejorar el Rendimiento<\/h2>\n<p>Las bases de datos de documentos como MongoDB te permiten definir tu esquema seg\u00fan tus necesidades. Para crear esquemas \u00f3ptimos en MongoDB, puedes agrupar los documentos. As\u00ed, en lugar de ajustar tu aplicaci\u00f3n a un modelo de datos, puedes construir un modelo de datos que se ajuste a tu caso de uso.<\/p>\n<p>Los documentos agrupados te permiten <a href=\"https:\/\/kinqsta.com\/es\/blog\/hacer-backup-base-de-datos-mysql-con-phpmyadmin\/\">almacenar datos relacionados<\/a> a los que se accede conjuntamente. Al dise\u00f1ar esquemas para MongoDB, se recomienda incrustar documentos por defecto. Utiliza las uniones y referencias del lado de la base de datos o de la aplicaci\u00f3n s\u00f3lo cuando merezcan la pena.<\/p>\n<p>Aseg\u00farate de que la carga de trabajo pueda recuperar un documento con la frecuencia necesaria. Al mismo tiempo, el documento debe tener todos los datos que necesita. Esto es fundamental para que tu aplicaci\u00f3n tenga un rendimiento excepcional.<\/p>\n<p>A continuaci\u00f3n, encontrar\u00e1s algunos patrones diferentes para incrustar documentos:<\/p>\n<h3>Patr\u00f3n de documento incrustado<\/h3>\n<p>Puedes utilizarlo para incrustar incluso subestructuras complicadas en los documentos con los que se utilizan. Incrustar datos conectados en un solo documento puede disminuir el n\u00famero de operaciones de lectura necesarias para obtener los datos. En general, debes estructurar tu esquema de forma que tu aplicaci\u00f3n reciba toda la informaci\u00f3n necesaria en una sola operaci\u00f3n de lectura. Por lo tanto, la regla que hay que tener en cuenta aqu\u00ed es que <strong>lo que se usa junto debe almacenarse junto<\/strong>.<\/p>\n<h3>Patr\u00f3n de subconjunto incrustado<\/h3>\n<p>El patr\u00f3n de subconjunto incrustado es un caso h\u00edbrido. Lo utilizar\u00edas para una colecci\u00f3n separada de una larga lista de elementos relacionados, donde puedes mantener algunos de esos elementos a mano para su visualizaci\u00f3n.<\/p>\n<p>Aqu\u00ed tienes un ejemplo que enumera cr\u00edticas de pel\u00edculas:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne()\n{   \n  _id: 321475,   \n  title: \"The Dark Knight\"\n}  \n&gt; db.review.find({movie_id: 321475})\n{   \n  _id: 264579,   \n  movie_id: 321475,   \n  stars: 4   \n  text: \"Amazing\"   \n}\n{   \n  _id: 375684,   \n  movie_id: 321475,   \n  stars:5,   \n  text: \"Mindblowing\"\n}<\/code><\/pre>\n<p>Ahora, imagina mil cr\u00edticas similares, pero s\u00f3lo piensas mostrar las dos m\u00e1s recientes cuando proyectes una pel\u00edcula. En este caso, tiene sentido almacenar ese subconjunto como una lista dentro del documento de la pel\u00edcula:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 321475})   \n{   \n  _id: 321475,   \n  title: \"The Dark Knight\",   \n  recent_reviews: [   \n    {_id: 264579, stars: 4, text: \"Amazing\"},   \n    {_id: 375684, stars: 5, text: \"Mindblowing\"}   \n  ]   \n}<\/code><\/pre>\n<p>En pocas palabras, si accedes habitualmente a un subconjunto de elementos relacionados, aseg\u00farate de incrustarlo.<\/p>\n<h3>Acceso independiente<\/h3>\n<p>Puede que quieras almacenar los subdocumentos en su colecci\u00f3n para separarlos de su colecci\u00f3n principal.<\/p>\n<p>Por ejemplo, toma la l\u00ednea de productos de una empresa. Si la empresa vende un peque\u00f1o conjunto de productos, quiz\u00e1 quieras almacenarlos dentro del documento de la empresa. Pero si quieres reutilizarlos entre empresas o acceder a ellos directamente por su unidad de mantenimiento de stock (SKU), tambi\u00e9n querr\u00e1s almacenarlos en su colecci\u00f3n.<\/p>\n<p>Si manipulas o accedes a una entidad de forma independiente, haz una colecci\u00f3n para almacenarla por separado, para una mejor pr\u00e1ctica.<\/p>\n<h3>Listas no limitadas<\/h3>\n<p>Almacenar listas cortas de informaci\u00f3n relacionada en su documento tiene un inconveniente. Si tu lista sigue creciendo sin l\u00edmites, no deber\u00edas ponerla en un solo documento. Esto se debe a que no podr\u00edas mantenerla durante mucho tiempo.<\/p>\n<p>Hay dos razones para ello. En primer lugar, MongoDB tiene un l\u00edmite en el tama\u00f1o de un solo documento. En segundo lugar, si accedes al documento con demasiada frecuencia, ver\u00e1s resultados negativos por el uso incontrolado de la memoria.<\/p>\n<p>En pocas palabras, si una lista empieza a crecer de forma ilimitada, haz una colecci\u00f3n para almacenarla por separado.<\/p>\n<h3>Patr\u00f3n de referencia extendido<\/h3>\n<p>El patr\u00f3n de referencia extendido es como el patr\u00f3n de subconjuntos. Tambi\u00e9n optimiza la informaci\u00f3n a la que accedes regularmente para almacenarla en el documento.<\/p>\n<p>Aqu\u00ed, en lugar de una lista, se aprovecha cuando un documento hace referencia a otro que est\u00e1 presente en la misma colecci\u00f3n. Al mismo tiempo, tambi\u00e9n almacena algunos campos de ese otro documento para poder acceder a ellos.<\/p>\n<p>Por ejemplo:<\/p>\n<pre><code class=\"language-markdown\">&gt; db.movie.findOne({_id: 245434})\n{   \n  _id: 245434,   \n  title: \"Mission Impossible 4 - Ghost Protocol\",   \n  studio_id: 924935,   \n  studio_name: \"Paramount Pictures\"   \n}<\/code><\/pre>\n<p>Como puedes ver, \u00abel studio_id\u00bb se almacena para que puedas buscar m\u00e1s informaci\u00f3n sobre el estudio que cre\u00f3 la pel\u00edcula. Pero el nombre del estudio tambi\u00e9n se copia en este documento para simplificar.<\/p>\n<p>Para incrustar la informaci\u00f3n de los documentos modificados regularmente, recuerda actualizar los documentos en los que has copiado esa informaci\u00f3n cuando se modifique. En otras palabras, si accedes habitualmente a algunos campos de un documento referenciado, incr\u00fastalos.<\/p>\n<h2>C\u00f3mo Monitorizar MongoDB<\/h2>\n<p>Puedes utilizar <a href=\"https:\/\/kinqsta.com\/es\/blog\/herramientas-apm\/\">herramientas de monitorizaci\u00f3n<\/a> como <a href=\"https:\/\/kinqsta.com\/es\/herramienta-apm\/\">Kinsta APM<\/a> para depurar las llamadas largas a la API, las consultas lentas a la base de datos, las peticiones largas a la URL externa, por nombrar algunas. Incluso puedes aprovechar los comandos para mejorar el rendimiento de la base de datos. Tambi\u00e9n puedes utilizarlas para inspeccionar la <a href=\"https:\/\/kinqsta.com\/es\/blog\/solucionar-reparar-problemas-base-datos\/\">salud de tus instancias de base de datos<\/a>.<\/p>\n<h3>\u00bfPor qu\u00e9 deber\u00edas monitorizar las bases de datos MongoDB?<\/h3>\n<p>Un aspecto clave de la <a href=\"https:\/\/kinqsta.com\/es\/mykinsta\/\">planificaci\u00f3n de la administraci\u00f3n de la base de datos<\/a> es la supervisi\u00f3n del rendimiento y la salud de tu cl\u00faster. MongoDB Atlas se encarga de la mayor\u00eda de los esfuerzos de administraci\u00f3n gracias a sus capacidades de tolerancia a fallos\/escalado.<\/p>\n<p>A pesar de ello, los usuarios deben saber c\u00f3mo hacer un seguimiento de los clusters. Tambi\u00e9n deben saber c\u00f3mo escalar o ajustar lo que necesiten antes de llegar a una crisis.<\/p>\n<p>Al monitorizar las bases de datos MongoDB, puedes:<\/p>\n<ul>\n<li>Observar la utilizaci\u00f3n de los recursos.<\/li>\n<li>Comprender la capacidad actual de tu base de datos.<\/li>\n<li>Reaccionar y detectar problemas en tiempo real para mejorar tu pila de aplicaciones.<\/li>\n<li>Observar la presencia de problemas de rendimiento y comportamientos an\u00f3malos.<\/li>\n<li>Alinearse con tus requisitos de gobernanza\/protecci\u00f3n de datos y acuerdos de nivel de servicio (SLA).<\/li>\n<\/ul>\n<h3>M\u00e9tricas clave a monitorizar<\/h3>\n<p>Al monitorizar MongoDB, hay cuatro aspectos clave que debes tener en cuenta:<\/p>\n<h4>M\u00e9tricas de hardware de MongoDB<\/h4>\n<p>Estas son las principales m\u00e9tricas para monitorizar el hardware:<\/p>\n<h5>CPU de proceso normalizada<\/h5>\n<p>Se define como el porcentaje de tiempo dedicado por la CPU al software de aplicaci\u00f3n que mantiene el proceso de MongoDB.<\/p>\n<p>Puedes escalar esto a un rango de 0-100% dividi\u00e9ndolo por el n\u00famero de n\u00facleos de la CPU. Incluye la CPU aprovechada por m\u00f3dulos como el kernel y el usuario.<\/p>\n<p>Una CPU del kernel alta podr\u00eda mostrar el agotamiento de la CPU a trav\u00e9s de las operaciones del sistema operativo. Pero el usuario vinculado a las operaciones de MongoDB podr\u00eda ser la causa principal del agotamiento de la CPU.<\/p>\n<h5>CPU normalizada del sistema<\/h5>\n<p>Es el porcentaje de tiempo que la CPU dedica a las llamadas del sistema para atender a este proceso de MongoDB. Puedes escalarlo a un rango de 0-100% dividi\u00e9ndolo por el n\u00famero de n\u00facleos de la CPU. Tambi\u00e9n cubre la CPU utilizada por m\u00f3dulos como iowait, user, kernel, steal, etc.<\/p>\n<p>Una CPU de usuario o un kernel alto podr\u00edan mostrar un agotamiento de la CPU por las operaciones de MongoDB (software). Un iowait alto podr\u00eda estar relacionado con el agotamiento del almacenamiento que provoca el agotamiento de la CPU.<\/p>\n<h5>IOPS de disco<\/h5>\n<p>Las IOPS de disco son el promedio de operaciones IO consumidas por segundo en la partici\u00f3n de disco de MongoDB.<\/p>\n<h5>Latencia del disco<\/h5>\n<p>Es la latencia de lectura y escritura en disco de la partici\u00f3n de MongoDB en milisegundos. Los valores altos (&gt;500ms) muestran que la capa de almacenamiento puede afectar al rendimiento de MongoDB.<\/p>\n<h5>Memoria del sistema<\/h5>\n<p>Utiliza la memoria del sistema para describir los bytes de memoria f\u00edsica utilizados frente al espacio libre disponible.<\/p>\n<p>La m\u00e9trica disponible se aproxima al n\u00famero de bytes de memoria del sistema disponibles. Puedes utilizarla para ejecutar nuevas aplicaciones, sin hacer swapping.<\/p>\n<h5>Espacio libre en el disco<\/h5>\n<p>Se define como el total de bytes de espacio libre en la partici\u00f3n de disco de MongoDB. El Atlas de MongoDB proporciona capacidades de autoescalado basadas en esta m\u00e9trica.<\/p>\n<h5>Uso de swap<\/h5>\n<p>Puedes aprovechar un gr\u00e1fico de uso de swap para describir cu\u00e1nta memoria se est\u00e1 colocando en el dispositivo de swap. Una m\u00e9trica de alto uso en este gr\u00e1fico muestra que la swap est\u00e1 siendo utilizada. Esto muestra que la memoria est\u00e1 infraaprovisionada para la carga de trabajo actual.<\/p>\n<h4>M\u00e9tricas de Conexi\u00f3n y Operaci\u00f3n del Cluster MongoDB<\/h4>\n<p>Estas son las principales m\u00e9tricas de Operaci\u00f3n y Conexi\u00f3n:<\/p>\n<h5>Tiempos de ejecuci\u00f3n de las operaciones<\/h5>\n<p>El tiempo medio de las operaciones (operaciones de escritura y lectura) realizadas durante el periodo de muestra seleccionado.<\/p>\n<h5>Contadores de operaciones<\/h5>\n<p>Es la tasa media de operaciones ejecutadas por segundo a lo largo del periodo de muestra seleccionado. El gr\u00e1fico\/m\u00e9trico Opcounters muestra el desglose de operaciones por tipos de operaci\u00f3n y velocidad para la instancia.<\/p>\n<h5>Conexiones<\/h5>\n<p>Esta m\u00e9trica se refiere al n\u00famero de conexiones abiertas a la instancia. Los picos o n\u00fameros elevados podr\u00edan indicar una estrategia de conexi\u00f3n sub\u00f3ptima, ya sea del lado del servidor que no responde o del lado del cliente.<\/p>\n<h5>Orientaci\u00f3n de la consulta y ejecutores de la consulta<\/h5>\n<p>Es la tasa media por segundo durante el periodo de muestra seleccionado de documentos escaneados. En el caso de los ejecutores de consulta, se trata de la evaluaci\u00f3n del plan de consulta y de las consultas. La orientaci\u00f3n de la consulta muestra la relaci\u00f3n entre el n\u00famero de documentos escaneados y el n\u00famero de documentos devueltos.<\/p>\n<p>Un ratio de n\u00famero elevado se\u00f1ala operaciones sub\u00f3ptimas. Estas operaciones escanean muchos documentos para devolver una parte menor.<\/p>\n<h5>Escanear y ordenar<\/h5>\n<p>Describe la tasa media por segundo a lo largo del periodo de muestra de consultas elegido. Devuelve resultados ordenados que no pueden ejecutar la operaci\u00f3n de ordenaci\u00f3n mediante un \u00edndice.<\/p>\n<h5>Colas<\/h5>\n<p>Las colas pueden describir el n\u00famero de operaciones que esperan un bloqueo, ya sea de escritura o de lectura. Unas colas elevadas podr\u00edan representar la existencia de un dise\u00f1o de esquema poco \u00f3ptimo. Tambi\u00e9n podr\u00eda indicar la existencia de rutas de escritura conflictivas, lo que supone una alta competencia por los recursos de la base de datos.<\/p>\n<h4>M\u00e9tricas de replicaci\u00f3n de MongoDB<\/h4>\n<p>Estas son las principales m\u00e9tricas para la monitorizaci\u00f3n de la replicaci\u00f3n:<\/p>\n<h5>Ventana Oplog de Replicaci\u00f3n<\/h5>\n<p>Esta m\u00e9trica indica el n\u00famero aproximado de horas disponibles en el oplog de replicaci\u00f3n del primario. Si un secundario se retrasa m\u00e1s de esta cantidad, no puede seguir el ritmo y necesitar\u00e1 una resincronizaci\u00f3n completa.<\/p>\n<h5>Retraso en la replicaci\u00f3n<\/h5>\n<p>El retraso en la replicaci\u00f3n se define como el n\u00famero aproximado de segundos que un nodo secundario va por detr\u00e1s del primario en las operaciones de escritura. Un retraso de replicaci\u00f3n elevado indicar\u00eda que el secundario tiene dificultades para replicarse. Podr\u00eda afectar a la latencia de tu operaci\u00f3n, dada la preocupaci\u00f3n por la lectura\/escritura de las conexiones.<\/p>\n<h5>Espacio libre de replicaci\u00f3n<\/h5>\n<p>Esta m\u00e9trica se refiere a la diferencia entre la ventana de oplog de la replicaci\u00f3n primaria y el retardo de replicaci\u00f3n del secundario. Si este valor llega a cero, puede provocar que el secundario entre en modo RECUPERACI\u00d3N.<\/p>\n<h5>Opcounters -repl<\/h5>\n<p>Opcounters -repl se define como la tasa media de operaciones de replicaci\u00f3n ejecutadas por segundo para el periodo de muestra elegido. Con la m\u00e9trica opcounters -graph\/, puedes echar un vistazo a la velocidad de las operaciones y al desglose de los tipos de operaciones para la instancia especificada.<\/p>\n<h5>Oplog GB\/Hora<\/h5>\n<p>Se define como la tasa media de gigabytes de oplog que el primario genera por hora. Los altos vol\u00famenes inesperados de oplog podr\u00edan indicar una carga de trabajo de escritura muy insuficiente o un problema de dise\u00f1o del esquema.<\/p>\n<h3>Herramientas de monitorizaci\u00f3n del rendimiento de MongoDB<\/h3>\n<p>MongoDB tiene herramientas de interfaz de usuario integradas en Cloud Manager, Atlas y Ops Manager para el seguimiento del rendimiento. Tambi\u00e9n proporciona algunos comandos y herramientas independientes para observar datos m\u00e1s crudos. Hablaremos de algunas herramientas que puedes ejecutar desde un host que tenga acceso y roles adecuados para comprobar tu entorno:<\/p>\n<h4>mongotop<\/h4>\n<p>Puedes aprovechar este comando para hacer un seguimiento de la cantidad de tiempo que una instancia de MongoDB pasa escribiendo y leyendo datos por colecci\u00f3n. Utiliza la siguiente sintaxis:<\/p>\n<pre><code class=\"language-markdown\">mongotop &lt;options&gt; &lt;connection-string&gt; &lt;polling-interval in seconds&gt;<\/code><\/pre>\n<h4>rs.status()<\/h4>\n<p>Este comando devuelve el estado del conjunto de r\u00e9plicas. Se ejecuta desde el punto de vista del miembro donde se ejecuta el m\u00e9todo.<\/p>\n<h4>mongostat<\/h4>\n<p>Puedes utilizar el comando <code>mongostat<\/code> para obtener una visi\u00f3n r\u00e1pida del estado de tu instancia del servidor MongoDB. Para obtener un resultado \u00f3ptimo, puedes utilizarlo para vigilar una sola instancia para un evento espec\u00edfico, ya que ofrece una vista en tiempo real.<\/p>\n<p>Aprovecha este comando para supervisar las estad\u00edsticas b\u00e1sicas del servidor, como las colas de bloqueo, el desglose de operaciones, las estad\u00edsticas de memoria de MongoDB y las conexiones\/red:<\/p>\n<pre><code class=\"language-markdown\">mongostat &lt;options&gt; &lt;connection-string&gt; &lt;polling interval in seconds&gt;<\/code><\/pre>\n<h4>dbStats<\/h4>\n<p>Este comando devuelve las estad\u00edsticas de almacenamiento de una base de datos concreta, como el n\u00famero de \u00edndices y su tama\u00f1o, los datos totales de la colecci\u00f3n frente al tama\u00f1o de almacenamiento, y las estad\u00edsticas relacionadas con la colecci\u00f3n (n\u00famero de colecciones y documentos).<\/p>\n<h4>db.serverStatus()<\/h4>\n<p>Puedes aprovechar el comando <code>db.serverStatus()<\/code> para tener una visi\u00f3n general del estado de la base de datos. Te proporciona un documento que representa los contadores de m\u00e9trica de la instancia actual. Ejecuta este comando a intervalos regulares para cotejar las estad\u00edsticas de la instancia.<\/p>\n<h4>collStats<\/h4>\n<p>El comando <code>collStats<\/code> recoge estad\u00edsticas similares a las que ofrece <code>dbStats<\/code> a nivel de colecci\u00f3n. Su salida consiste en un recuento de los objetos de la colecci\u00f3n, la cantidad de espacio en disco consumido por la colecci\u00f3n, el tama\u00f1o de la colecci\u00f3n y la informaci\u00f3n relativa a sus \u00edndices para una colecci\u00f3n determinada.<\/p>\n<p>Puedes utilizar todos estos comandos para ofrecer informes y monitorizaci\u00f3n en tiempo real del servidor de la base de datos que te permitan controlar el rendimiento y los errores de la base de datos y te ayuden a tomar decisiones informadas para perfeccionar una base de datos.<\/p>\n<h2>C\u00f3mo Eliminar una Base de Datos MongoDB<\/h2>\n<p>Para eliminar una base de datos que hayas creado en MongoDB, tienes que conectarte a ella mediante la palabra clave use.<\/p>\n<p>Digamos que has creado una base de datos llamada \u00abIngenieros\u00bb. Para conectarte a la base de datos, utilizar\u00e1s el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">use Engineers<\/code><\/pre>\n<p>A continuaci\u00f3n, escribe <code>db.dropDatabase()<\/code> para deshacerte de esta base de datos. Tras la ejecuci\u00f3n, este es el resultado que puedes esperar:<\/p>\n<pre><code class=\"language-markdown\">{ \"dropped\"  :  \"Engineers\", \"ok\" : 1 }<\/code><\/pre>\n<p>Puedes ejecutar el comando <code>showdbs<\/code> para verificar si la base de datos sigue existiendo.<\/p>\n<h2>Resumen<\/h2>\n<p>Para exprimir hasta la \u00faltima gota de valor de MongoDB, debes tener una s\u00f3lida comprensi\u00f3n de los fundamentos. Por lo tanto, es fundamental conocer las bases de datos MongoDB como la palma de tu mano. Para ello, primero debes familiarizarte con los m\u00e9todos para <a href=\"https:\/\/kinqsta.com\/es\/devkinsta\/\">crear una base de datos<\/a>.<\/p>\n\n<p>En este art\u00edculo, arrojamos luz sobre los diferentes m\u00e9todos que puedes utilizar para crear una base de datos en MongoDB, seguido de una descripci\u00f3n detallada de algunos ingeniosos comandos de MongoDB para mantenerte al tanto de tus bases de datos. Por \u00faltimo, completamos la discusi\u00f3n hablando de c\u00f3mo puedes aprovechar los documentos incrustados y las herramientas de monitorizaci\u00f3n del rendimiento en MongoDB para garantizar que tu flujo de trabajo funcione con la m\u00e1xima eficiencia.<\/p>\n<p>\u00bfCu\u00e1l es tu opini\u00f3n sobre estos comandos de MongoDB? \u00bfHemos omitido alg\u00fan aspecto o m\u00e9todo que te hubiera gustado ver aqu\u00ed? \u00a1H\u00e1znoslo saber en los comentarios!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En funci\u00f3n de los requisitos de tu software, puedes priorizar la flexibilidad, la escalabilidad, el rendimiento o la velocidad. De ah\u00ed que los desarrolladores y las &#8230;<\/p>\n","protected":false},"author":117,"featured_media":59160,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[622,1067,403,414],"topic":[1337],"class_list":["post-59159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-mongodb","tag-web-development","tag-webdev","topic-herramientas-de-desarrollo-web"],"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>C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer<\/title>\n<meta name=\"description\" content=\"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.\" \/>\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\/crear-base-de-datos-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer\" \/>\n<meta property=\"og:description\" content=\"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-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-11-08T09:00:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T13:44:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\" \/>\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\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"34 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer\",\"datePublished\":\"2022-11-08T09:00:09+00:00\",\"dateModified\":\"2025-01-17T13:44:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/\"},\"wordCount\":6754,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\",\"keywords\":[\"database\",\"MongoDB\",\"web development\",\"webdev\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/\",\"url\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/\",\"name\":\"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\",\"datePublished\":\"2022-11-08T09:00:09+00:00\",\"dateModified\":\"2025-01-17T13:44:10+00:00\",\"description\":\"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Herramientas de Desarrollo Web\",\"item\":\"https:\/\/kinqsta.com\/es\/secciones\/herramientas-de-desarrollo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer\"}]},{\"@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\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinqsta.com\/es\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer","description":"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.","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\/crear-base-de-datos-mongodb\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer","og_description":"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.","og_url":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-11-08T09:00:09+00:00","article_modified_time":"2025-01-17T13:44:10+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.","twitter_image":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Salman Ravoof","Tiempo de lectura":"34 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer","datePublished":"2022-11-08T09:00:09+00:00","dateModified":"2025-01-17T13:44:10+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/"},"wordCount":6754,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","keywords":["database","MongoDB","web development","webdev"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/","url":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/","name":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","datePublished":"2022-11-08T09:00:09+00:00","dateModified":"2025-01-17T13:44:10+00:00","description":"Para comprender mejor MongoDB, es necesario saber c\u00f3mo crear bases de datos en MongoDB, empezando por el comando MongoDB Create Database.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#primaryimage","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/11\/mongodb-create-database.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/es\/blog\/crear-base-de-datos-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Herramientas de Desarrollo Web","item":"https:\/\/kinqsta.com\/es\/secciones\/herramientas-de-desarrollo-web\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo Crear Una Base de Datos MongoDB: 6 Aspectos Cr\u00edticos a Conocer"}]},{"@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\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinqsta.com\/es\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/59159","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\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/comments?post=59159"}],"version-history":[{"count":16,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/59159\/revisions"}],"predecessor-version":[{"id":67503,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/59159\/revisions\/67503"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/translations\/dk"},{"href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/59159\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media\/59160"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media?parent=59159"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/tags?post=59159"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/topic?post=59159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}