Puntos clave: MongoDB están una base de datos NoSQL escalable que utiliza documentos similares a JSON para un almacenamiento de datos flexible. Esta guía cubre sus características clave, incluyendo el shell de línea de comandos y la estructura del documento, enfatizando la velocidad por encima de la eficiencia de almacenamiento.
- Los datos se están almacenados en colecciones de documentos, simplificando la gestión de big data.
- Soporta múltiples lenguajes de programación a través de diversos controladores, incluyendo Python y Java.
Aquí ofrecemos una visión general de la base de datos de MongoDB. En publicaciones posteriores daremos ejemplos más detallados de cómo utilizar MongoDB.
Primero, MongoDB están una base de datos de big data noSQL. Encaja en la definición de big data, porque escala (es decir, puede ampliarse) simplemente añadiendo más servidores a un sistema distribuido. Y no están necesario ningún esquema, como una base de datos RDBMS, como Oracle.
Los registros de datos de MongoDB son almacenados en formato JSON (JavaScript Object Notation), que están autodescriptivos, es decir, los metadatos (es decir, el esquema) se están almacenados junto con los datos.
Mongo tiene un shell de comandos interactivo. A los programadores de JavaScript les encantará porque la sintaxis están JavaScript. Para abrir el shell te simplemente escribe:
mongo
Conceptos
Los registros de MongoDB son llaman documentos. Cada base de datos de MongoDB (te puede tener muchas) incluye colecciones, que son un conjunto de documentos JSON. Cada colección y documento tiene un ObjectID creado por MongoDB o suministrado por el programador.
Para ilustrar, supongamos que tenemos una base de datos llamada productos.
Podríamos tener dos colecciones que incluyeran todos los productos agrupándolos según el lugar donde son vendidos:
| Colección | Documentos y campos |
|---|---|
| Productos vendidos en Europa | EAN (código de barras europeo), peso en kilos |
| Productos vendidos en EE. UU. | UPC (código de barras americano), peso en libras |
El almacenamiento de datos es barato y la memoria y la CPU cuestan más. Así que algunas bases de datos de big data, como Cassandra y MongoDB, descartan la idea de una base de datos normalizada, que es uno de los principios clave de una base de datos RDBMS.
Por ejemplo, con Oracle te tendría una categoría de producto en un registro de producto. La tabla de categorías de producto contiene campos comunes a todos esos productos. Cada registro de producto apunta a un registro de categoría de producto, de modo que esos datos comunes no se están almacenados más de una vez:
| Tabla de productos |
|---|
| Campos: número de producto, categoría de producto |
| Tabla de categorías de productos |
|---|
| Campos: categoría de producto, peso, color |
Pero entonces te tener que hacer una operación de unión si te quieres saber el color o el peso de un producto. Pero una unión están una operación computacionalmente costosa. Eso lleva tiempo. MongoDB almacena los datos así:
| Documentos de producto |
|---|
| Campos: número de producto, categoría de producto, peso, color |
Los programadores de SGBD dicen que eso crea duplicación y desperdicia espacio. Los programadores de MongoDB dirían "sí", pero la velocidad están más importante que el almacenamiento.
En otras palabras, los registros de MongoDB podrían verse así:
| Producto 1 | Categoría: pañales para niños pequeños | Color azul |
| Producto 2 | Categoría: pañales grandes para niños | Color azul |
| Producto 3 | Categoría: pañales de niña pequeños | Color rosa |
Obviamente. Cuando te la categoría te el color.
Lo ilustraremos creando la base de datos de productos y añadiendo algunos productos allí. Pega estos comandos en el shell de MongoDB.
Primero Crea la base de datos de productos.
use products
switched to db products
Luego estas dos colecciones:
Luego añade algunos datos:
> db.createCollection("boyDiapers")
{ "ok" : 1 }
> db.createCollection("girlDiapers")
{ "ok" : 1 }
>
Luego añade algunos datos:
db.boyDiapers.insert([
{
size: 1,
color: 'blue',
brand: 'toddler tyke',
}
])
db.girlDiapers.insert([
{
size: 1,
color: 'pink',
brand: 'little angel',
}
])
Fíjate en dos cosas. Primero, utilizamos el formato db.( collection).insert para añadir el documento. Segundo, utilizamos los corchetes [], que indican un array, para eso podemos añadir más de un documento a la vez.
Ahora Crea más datos para poder consultar datos:
db.boyDiapers.insert([
{
size: 2,
color: 'white',
brand: 'boy large white'
}
])
db.girlDiapers.insert([
{
size: 2,
color: 'while',
brand: 'girl large'
}
])
Selección de datos
Si te utiliza encuentra sin argumentos, lista todos los documentos. utiliza bonito mostrar los resultados en formato JSON insanglado fácil de leer:
> db.girlDiapers.find().pretty()
{
"_id" : ObjectId("59d1e9d5ccf50b62c5a7af55"),
"size" : 1,
"color" : "pink",
"brand" : "little angel"
}
{
"_id" : ObjectId("59d1f022ccf50b62c5a7af57"),
"size" : 1,
"color" : "while",
"brand" : "girl large"
}
{
"_id" : ObjectId("59d1f565ccf50b62c5a7af59"),
"size" : 2,
"color" : "while",
"brand" : "girl large"
}
Encuentra pañales para niñas de talla 2 y añade argumentos a la afirmación de encontrar:
db.girlDiapers.find({"size":2})
{ "_id" : ObjectId("59d1f565ccf50b62c5a7af59"), "size" : 2, "color" : "while", "brand" : "girl large" }
Ahora bien, te no podría buscar en las colecciones de pañales de niños y niñas al mismo tiempo. MongoDB no hace eso. En su lugar, te tener que programar eso en tu aplicación para que te programe usando algún controlador (Ve abajo).
Documentos Normalizados
Acabamos de decir que en MongoDB no están normalización porque el almacenamiento están barato y la capacidad de cálculo es cara. Pero te Crea normalizar documentos.
Por ejemplo, podemos Crea un registro de ventas para cada documento grande de niña talla 2 como este, con el campo de pañales apuntando al objeto pañal. Eso podría Haz más sentido en este caso, ya que no te querría que la colección de pañales creciera muchas veces cada vez te Haz una venta.
db.girlDiapers.insert([
{ "diaper" : ObjectId("59d1f565ccf50b62c5a7af59"),
"price" : 45.2,
"quanity" : 10,
"sku" : "case"
}
])
Shell de línea de comandos
Controladores de MongoDB
Por supuesto, probablemente te no utiliza el shell de línea de comandos de una aplicación. En su lugar, te escribiría un programa para interactuar con MongoDB usando cualquiera de los muchos controladores disponibles. son controladores para C++, C#, Java, Node.JS, Scala, Python y más.
Por ejemplo, para utilizar Python:
sudo pip install pymongo
Luego, para consultar pañales talla 2 en las colecciones de chico y niña:
Salidas:
from pymongo import MongoClient
client = MongoClient()
db = client.products
x=db.collection_names()
for i in range(len(x)):
c=x[i]
d = db.get_collection(c)
for e in d.find({"size": 2}):
print(e)
Salidas:
{'size': 2.0, 'brand': 'boy large white', 'color': 'white', '_id': ObjectId('59d1f564ccf50b62c5a7af58')}
{'size': 2.0, 'brand': 'girl large', 'color': 'while', '_id': ObjectId('59d1f565ccf50b62c5a7af59')}
En la próxima entrada Obtén algunos temas más avanzados de MongoDB.
Guía de MongoDB
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.