Introducción
MongoDB utiliza estructuras orientadas a documentos para almacenar, administrar y procesar datos. Los documentos individuales se organizan en colecciones, que a su vez se almacenan en bases de datos. Debido a que el esquema de cada documento no está definido por un esquema estático, los sistemas basados en documentos ofrecen más flexibilidad que los sistemas relacionales que se componen de tablas y registros.
En esta guía, hablaremos sobre cómo crear y administrar las estructuras que usa MongoDB para organizar los datos. Cubriremos cómo crear y administrar bases de datos y luego cómo hacer colecciones para guardar documentos similares o relacionados.
Cómo ver bases de datos existentes
Antes de comenzar a crear nuevas bases de datos, es útil familiarizarse con algunos de los métodos que proporciona MongoDB para encontrar información sobre las bases de datos existentes. Esto puede ayudarlo a comprender el estado actual del sistema antes de comenzar a realizar cambios.
Para mostrar todas las bases de datos en el sistema al que tiene acceso, use el show dbs
método:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB responderá con los nombres de todas las bases de datos accesibles en el sistema, así como un resumen de su espacio de almacenamiento actual.
Para ver en qué base de datos está configurado actualmente para operar, use db.getName()
comando o su alias abreviado, db
:
db
test
Es posible que descubra que actualmente está utilizando una base de datos que no figura en la lista de show dbs
dominio. Esto se debe a que en MongoDB, hasta que escribe el primer documento en la base de datos, la base de datos no se crea realmente. Entonces, en el resultado del ejemplo anterior, el shell está preparado para operar en una test
base de datos, pero como aún no existe, no será devuelta por show dbs
comando.
Para cambiar a una base de datos diferente, puede usar use
comando:
use admin
switched to db admin
Para obtener información básica sobre su base de datos actual, puede usar db.stats()
método:
db.stats()
{ "db" : "admin", "collections" : 3, "views" : 0, "objects" : 4, "avgObjSize" : 278.25, "dataSize" : 1113, "storageSize" : 86016, "indexes" : 5, "indexSize" : 147456, "totalSize" : 233472, "scaleFactor" : 1, "fsUsedSize" : 2876923904, "fsTotalSize" : 25832407040, "ok" : 1}
El resultado muestra información sobre la cantidad de colecciones dentro de la base de datos, estadísticas de almacenamiento, información de índice y más.
Cómo crear bases de datos
MongoDB no tiene un comando explícito para crear una nueva base de datos. En cambio, como se mencionó anteriormente, debe indicarle a MongoDB que desea escribir nuevos documentos en una nueva base de datos. Cuando se crean esos documentos, implícitamente crearán la base de datos.
Para preparar MongoDB para escribir en una nueva base de datos, emita use
comando para cambiar a una base de datos inexistente.
Aquí, configuraremos MongoDB para crear una nueva base de datos llamada playground
:
use playground
switched to db playground
Si revisa su base de datos actual, confirmará que el playground
la base de datos es actualmente el objetivo de los comandos relacionados con la base de datos:
db
playground
Sin embargo, como se mencionó anteriormente, dado que aún no hemos creado ningún documento, la base de datos en sí aún no se ha creado:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Para crear realmente la nueva base de datos, primero necesitaremos crear algo.
Cómo ver las colecciones en una base de datos
En MongoDB, colecciones son estructuras utilizadas para agrupar documentos utilizando cualquier sistema de categorización que desee implementar. Viven dentro de bases de datos y almacenan documentos.
Puede ver las colecciones disponibles en la base de datos que está utilizando actualmente utilizando show collections
método.
Aquí, cambiaremos al admin
base de datos que tiene algunas colecciones disponibles para demostrar:
use adminshow collections
system.rolessystem.userssystem.version
Alternativamente, puede recuperar los mismos nombres de colección en una matriz usando db.getCollectionNames()
método:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
Para mostrar información adicional sobre las colecciones en la base de datos actual, use db.getCollectionInfos()
método:
db.getCollectionInfos()
[ { "name" : "system.roles", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.users", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Opcionalmente, también puede pasar un documento al comando para filtrar los resultados. Por ejemplo, si solo está interesado en ver la información sobre el system.version
colección, puede escribir:
db.getCollectionInfos( { name: "system.version" })
[ { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Para verificar cuántos documentos contiene una colección, use db.<collection>.count()
método. Por ejemplo, el siguiente comando verifica cuántos documentos hay en el system.users
colección:
db.system.users.count()
2
Para ver estadísticas básicas sobre las colecciones en la base de datos actual, use db.printCollectionStats()
método:
db.printCollectionStats()
El comando puede generar más información de la que puede consumir fácilmente, pero contiene, pero es útil en algunos escenarios en los que necesita analizar en profundidad las características de una colección.
Cómo crear colecciones
Para crear una nueva colección, hay dos opciones:puede crear colecciones de forma implícita o explícita.
Al igual que con las bases de datos, MongoDB puede crear colecciones automáticamente la primera vez que se escribe un documento en ellas. Este método le dice a MongoDB que cree una nueva colección insertando un documento en una colección que aún no existe.
Por ejemplo, podemos volver a cambiar al playground
base de datos en la que estábamos interesados anteriormente. Una vez que estemos en ese espacio de nombres, podemos insertar un nuevo documento en una colección llamando a insert.()
Comando sobre el nombre que nos gustaría usar para la nueva colección. Aquí, podemos crear un documento sobre una diapositiva en una nueva colección llamada equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
El resultado indica que se escribió un documento. El comando anterior realizó tres acciones separadas. Primero, MongoDB creó el playground
base de datos a la que habíamos hecho referencia en nuestro use
dominio. También creó el equipment
colección dentro de la base de datos ya que llamamos al insert()
comando en ese nombre de colección. Finalmente, crea el documento real dentro del equipment
colección utilizando la entrada que proporcionamos a insert()
comando.
Puede verificar que todas estas acciones se han realizado con los siguientes comandos:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
El resultado debe mostrar que el playground
base de datos se encuentra ahora entre las bases de datos enumeradas, que el equipment
colección está en la lista, que hay un documento dentro del equipement
colección, y que el documento es el {name: "slide"}
documento que insertamos en el comando.
La otra opción para usar para crear colecciones es usar explícitamente db.createCollection()
método. Esto le permite crear colecciones sin agregarles ningún documento.
Por ejemplo, puedes crear una nueva colección en el playground
base de datos llamada maintenance.requests
escribiendo:
db.createCollection("maintenance.requests")
{ "ok" : 1 }
Podemos comprobar que la nueva colección aparece cuando la consultamos, pero que no tiene documentos:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
db.createCollection()
El método es principalmente útil porque le permite especificar varias opciones al momento de la creación. Por ejemplo, es posible que deseemos crear una colección limitada , que es una colección que mantiene un límite superior en su tamaño asignado que almacena al eliminar su documento más antiguo cuando está lleno.
Para crear una colección limitada llamada notifications
que puede almacenar, como máximo, 10240 bytes de información, podrías llamar:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Esto creará una notification
limitada colección, que podemos verificar escribiendo:
db.getCollecitonInfos({"options.capped": true})
[ { "name" : "notifications", "type" : "collection", "options" : { "capped" : true, "size" : 10240 }, "info" : { "readOnly" : false, "uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Cómo eliminar colecciones
Para eliminar una colección, puede usar drop()
en la colección misma.
Por ejemplo, para quitar las notifications
limitadas colección que creamos, puede escribir:
db.notifications.drop()
true
Puede verificar que la operación se haya realizado correctamente enumerando las colecciones en la base de datos actual nuevamente:
show collections
equipmentmaintenance.requests
Cómo eliminar bases de datos
Para eliminar una base de datos completa, llame a db.dropDatabase()
dominio. Esto eliminará la base de datos actual, así que asegúrese de estar en la base de datos correcta antes de ejecutar:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Si revisa la lista de bases de datos disponibles, playground
ya no se muestra:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Dado que aún no hemos cambiado a una nueva base de datos, MongoDB todavía está configurado para crear un playground
base de datos si elegimos agregar una nueva colección o documento. Puede verificar esto con el db
comando:
db
playground
Conclusión
Crear y administrar bases de datos y colecciones es una habilidad importante cuando se utiliza MongoDB. Estas herramientas organizativas básicas le permiten agrupar documentos relacionados, consultar subconjuntos de información y configurar políticas de autorización para diferentes tipos de datos. Familiarizarse con la forma de administrar de manera efectiva estas estructuras le permitirá administrar sus datos de manera más efectiva y con menos sorpresas.