# Tutorial de MongoDB: introducción e instalación

Por lo general, los diferentes modelos de bases de datos, SQL o NoSQL, se diferencian significativamente en cuanto a su configuración y funcionamiento. El software de código abierto MongoDB es el ejemplo perfecto para demostrar que, aun cuando se utiliza una base de datos [NoSQL](https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/nosql/ "NoSQL"), esto no implica necesariamente que se tengan que tirar por la borda todos los conocimientos sobre bases de datos relacionales. Aunque la base de datos orientada a documentos se diferencia en gran medida de clásicos como MySQL, ambos modelos comparten ciertas similitudes que encontrarás en [nuestra guía sobre MongoDB](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/mongodb-presentacion-y-comparacion-con-mysql/ "MongoDB: presentación y comparación con MySQL"). Aunque MongoDB requiere una familiarización con el lenguaje de consulta y la sintaxis de comandos, iniciarse en él no implica una gran dificultad para usuarios experimentados en el uso de SQL.

En el siguiente tutorial de MongoDB nos ocupamos de la instalación, configuración y gestión de este moderno sistema de bases de datos, **utilizando Ubuntu como ejemplo**.

## Paso 1: la instalación

En el área de descargas de la página oficial de [MongoDB](https://www.mongodb.com/download-center?jmp=nav#community "Descarga aquí MongoDB") encontrarás la edición de código abierto “Community Server”, así como la solución comercial para empresas. El primer paso consiste en **seleccionar los archivos binarios de instalación para tu sistema y descargarlos**. MongoDB es un programa multiplataforma, por lo que se adapta a una gran variedad de sistemas, como Windows, Linux, OS X y Solaris. En un sistema operativo Windows, es posible instalar la base de datos utilizando simplemente el archivo de instalación descargado y almacenándolo en el directorio correspondiente. Los usuarios de Windows 10 pueden utilizar la versión para Windows Server 2008 (64 bits). Para Linux y otros sistemas UNIX es necesario descargar el archivo, descomprimirlo e instalarlo con la ayuda del gestor de paquetes correspondiente. Dependiendo de la distribución, tendrás que importar la clave pública GPG para MongoDB. Ubuntu requiere esta clave de autenticación, por lo que se debe implementar el siguiente comando:

```none
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
```

A continuación, actualiza la lista del gestor de paquetes:

```none
sudo apt-get update
```

Finalmente, instala MongoDB, así como otras herramientas útiles de gestión:

```none
sudo apt-get install -y mongodb-org
```

## Paso 2: inicia el servidor MongoDB

Si lo deseas, en el **archivo de configuración** */etc/mongod.conf* puedes cambiar el directorio de instalación asignado por defecto */var/lib/mongodb,* así como el directorio de registro */var/log/mongodb.* Utiliza el siguiente comando para iniciar la base de datos:

```none
sudo service mongod start
```

Si, en lugar de utilizar el parámetro *start*, se utiliza el parámetro *stop,* se **finaliza la ejecución de la base de datos**; *restart* se encargará de reiniciarla. Para comprobar si MongoDB se ha iniciado con éxito, puedes buscar la siguiente línea de comando en el archivo de registro */log/mongodb/mongod.log*:

```none
[initandlisten] waiting for connections on port <port>
```

Esta indica que el servidor de la base de datos se está ejecutando y espera las conexiones entrantes del **puerto definido** (&lt;port&gt;) en el archivo de configuración. Se utiliza por defecto el puerto 27017.

## Paso 3: iniciar el cliente

Una vez se ejecuta el servidor MongoDB, se puede iniciar el cliente. En este punto se utiliza Mongo shell, la interfaz de comandos incluida por defecto, basada en JavaScript y utilizada para la **administración de la base de datos**, así como para el **acceso y la actualización del conjunto de datos**. Con este comando puedes iniciar el cliente dentro del mismo sistema en el que se ejecuta la aplicación MongoDB:

```none
mongo
```

Mongo shell se conecta automáticamente con la instancia de Mongo DB **ejecutada en el host y el puerto local 27017**. También es posible modificar los ajustes estándar y adaptarlos a las propias necesidades. La siguiente tabla resume estas y otras opciones importantes:

<table>
  <tbody>
    <tr>
      <td><strong>**Parámetro</strong>**</td>
      <td><strong>**Descripción</strong>**</td>
    </tr>
    <tr>
      <td>*--shell*</td>
      <td>Activa la <strong>interfaz del shell</strong> y la presenta después de ejecutar un comando.</td>
    </tr>
    <tr>
      <td>*--nodb*</td>
      <td>Evita que Mongo shell se conecte con una base de datos.</td>
    </tr>
    <tr>
      <td>*--port &lt;port&gt;*</td>
      <td>Define el puerto para la conexión.</td>
    </tr>
    <tr>
      <td>*--host &lt;hostname&gt;*</td>
      <td>Define el host para la conexión.</td>
    </tr>
    <tr>
      <td>*--help o -h*</td>
      <td>Muestra las opciones.</td>
    </tr>
    <tr>
      <td>--*username &lt;username&gt;* o *-u &lt;username&gt;*</td>
      <td>Una vez definidos los permisos de acceso, podrás acceder con tu respectivo nombre de usuario (*&lt;username&gt;*).</td>
    </tr>
    <tr>
      <td>*--password &lt;password&gt;* o *-p &lt;password&gt;*</td>
      <td>Cuando se han definido los permisos de acceso, podrás acceder utilizando la contraseña (&lt;password&gt;) correspondiente.&lt;/password&gt;</td>
    </tr>
  </tbody>
</table>

Los símbolos de menor que (&lt;) y mayor que (&gt;) utilizados en la tabla anterior no forman parte del parámetro como tal y por lo tanto no aparecen en el comando final. El proceso de definición del puerto significa, por ejemplo, que si decides utilizar el puerto 40000 en vez del 27017, se verá así:

```none
mongo --port 40000
```

## Paso 4: crear una base de datos

Una vez MongoDB y el cliente están en funcionamiento, puedes concentrarte en la gestión y edición de datos. Sin embargo, antes que nada es necesario crear una base de datos, de lo contrario, el conjunto de datos (collections) y los documentos se almacenarán en la base de datos de prueba generada automáticamente. E**l comando *use*** facilita la creación de una base de datos***.*** Si deseas crear una con el nombre *mibasededatos*, utiliza el siguiente comando:

```none
use mibasededatos
```

El comando *use* también permite seleccionar una base de datos MongoDB ya existente en caso de que quieras utilizarla para el **procesamiento de datos**. Con la ayuda del comando corto *db*, puedes identificar qué base de datos se encuentra actualmente seleccionada.

## Paso 5: crear collection

El siguiente paso es crear tu primera collection o **carpeta de archivos para los diferentes documentos BSON**, en donde, posteriormente, se guardará la totalidad de los datos. La sintaxis básica es esta:

```none
db.createCollection(<name>, { options } )
```

Así, el comando tiene ambos parámetros: *name* (nombre de la carpeta de archivos) y *options* (opciones de configuración para collection). En las opciones se especifica, por ejemplo, si se debe limitar el tamaño de los archivos (*capped: true*) o si se deben limitar la cantidad de bytes (*size: &lt;number&gt;*) o el número de documentos (*max: &lt;number&gt;*) en una collection. Una collection denominada *micarpetadearchivos*, con un límite de bytes de 6.142.800 y un máximo de 10.000 documentos se crearía, por ejemplo, con el siguiente comando (el espacio en blanco solo sirve para ofrecer mejor claridad:

```none
db.createCollection ("micarpetadearchivos", { capped: true,
    size: 6142800,
    max: 10000 } )
```

## Paso 6: agregar documentos

Una vez se ha creado la carpeta, se le pueden añadir documentos. Para ello existen, principalmente, tres métodos:

- *.insertOne()*
- *.insertMany()*
- *.insert()*

De esta forma es posible añadir solo un documento (*.insertOne*), algunos documentos (*.insertMany*) o un gran volumen de documentos (*.insert*). El siguiente ejemplo muestra una **entrada de base de datos** con tres datos simples: nombre, edad y ocupación, que se insertarán en la carpeta creada en el paso anterior.

```none
db.micarpetadearchivos.insertOne(
{
        Nombre: "nombre",
        Edad: 28,
        Ocupación: "estudiante"
    }
)
```

Así, tanto para esta entrada, como para todas las futuras, MongoDB genera automáticamente un **identificador único** para cada collection.

## Paso 7: administrar documentos

En la etapa final de nuestro tutorial de MongoDB mostramos el proceso de gestión básica de los documentos creados. Para poder realizar cualquier cambio en un documento debes encontrarlo. Esta solicitud se logra con el comando *find* y puede, de ser necesario, presentarse y filtrarse con los parámetros *query filter* (filtros de consulta) y *projection* (especificación de los resultados). Por ejemplo, para acceder al documento generado en el paso anterior, se utiliza el siguiente comando:

```none
db.micarpetadearchivos.find( { Nombre: "nombre", Edad: 28 } )
```

Si lo que quieres es actualizar este documento, puedes valerte de la función *update*. Para ello, escoge el valor que deseas cambiar, **selecciona un operador *update*** y especifica el nuevo valor. Por ejemplo, para modificar la edad del caso anterior, necesitas el operador *$set*:

```none
db.micarpetadearchivos.update( 
{ Edad: 28 },
{
    $set: { Edad: 30 }
}
)
```

Para conocer otros de los operadores *update*, visita la [documentación en inglés](https://docs.mongodb.com/manual/reference/operator/update/ "MongoDB Docs: operadores update para la administración de documentos") de la web oficial de MongoDB.

Para eliminar los documentos de una collection, utiliza el comando *remove*:

```none
db.micarpetadearchivos.remove ()
```

La única manera de eliminar documentos individuales o colecciones es mediante la definición de criterios tales como la identificación del archivo u otros valores exactos que le permitan a MongoDB determinar de qué tipo de registro se trata. Cuánto más específico seas, más exacta será la actuación del sistema a la hora de eliminar archivos. Por ejemplo, el comando:

```none
db.micarpetadearchivos.remove ( { Edad: 28 } )
```

elimina todas las entradas con el valor 28 para el campo “Edad”. Usando el **parámetro *justOne*** (1) también es posible especificar que solo quieres eliminar una de las entradas con dicho valor:

```none
db.micarpetadearchivos.remove ( { Edad: 28 }, 1 )
```

Para obtener más información sobre, por ejemplo, la administración de usuarios, las configuraciones de seguridad, la creación de réplicas o la distribución de datos en múltiples sistemas, visita la documentación oficial en [mongodb.com](https://docs.mongodb.com/manual/ "MongoDB Manual: todo lo que necesitas saber sobre la base de datos basada en documentos") o el tutorial de MongoDB en [tutorialspoint.com](http://www.tutorialspoint.com/mongodb/index.htm "tutorialspoint: consejos y trucos profesionales para MongoDB").


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/tutorial-de-mongodb-primeros-pasos/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/tutorial-de-mongodb-primeros-pasos/) for AI/LLM consumption.