Un pedido, un documento
En MongoDB un pedido con todos sus productos puede ser un solo documento. Al terminar sabrás crearlos, buscarlos con operadores y actualizarlos sin romperlos.
Primero, la idea completa
Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.
De filas a documentos
En una base relacional, un pedido con sus productos se reparte en varias tablas que luego se unen con JOIN. En MongoDB, el pedido completo puede ser un solo documento: un objeto JSON con campos, listas y objetos dentro de objetos. En disco se guarda en BSON, una versión binaria de JSON.
Las piezas se corresponden así:
- Base de datos → base de datos.
- Tabla → colección: un grupo de documentos.
- Fila → documento.
- Columna → campo.
Cada documento tiene un campo _id único; si no lo das, MongoDB lo genera. Y las colecciones no tienen esquema: dos documentos de la misma colección pueden tener campos distintos. Eso da flexibilidad, pero la disciplina pasa a la aplicación.
Para relacionar documentos hay dos caminos: incrustar (meter un documento dentro de otro) o referenciar (guardar el _id del otro, como una llave foránea).
Para cada caso, decide si conviene incrustar o referenciar, y mira cómo queda el documento.
Crear, leer, actualizar y borrar
En la consola de MongoDB, show dbs lista las bases, use tienda cambia a la base tienda (y la crea al guardar algo), show collections lista sus colecciones y db.createCollection('posts') crea una vacía. Las operaciones se escriben como db.<colección>.<operación>(…):
- Crear:
insertOne({…}),insertMany([…])(o el clásicoinsert). - Leer:
find(filtro, proyección)devuelve todos los que coinciden;findOne, solo el primero. Se encadenan.sort({campo: 1})(1 ascendente, -1 descendente),.limit(n)y.pretty(). - Actualizar:
updateOne(filtro, {$set: {…}}). Sin$set, el documento se reemplaza entero. Con{upsert: true}, si no existe, se crea. - Borrar:
deleteOne(filtro),deleteMany(filtro)(o el clásicoremove).
El filtro también es un documento
En vez de un WHERE, find recibe un documento que describe lo que buscas. {status: "A"} pide igualdad. Para otras comparaciones se usan operadores que empiezan con $:
{qty: {$lt: 30}}: menor que. También$lte,$gt,$gte,$ne.{status: {$in: ["A", "D"]}}: uno de varios valores.- Dos campos en el mismo filtro se combinan con Y:
{status: "A", qty: {$lt: 30}}. - Para O:
{$or: [{status: "A"}, {qty: {$lt: 30}}]}. - Expresiones regulares:
{item: /^p/}busca los que empiezan con p. Para campos anidados se usa el punto:{"size.uom": "cm"}.
La proyección elige qué campos devolver: {item: 1, status: 1, _id: 0} muestra solo esos dos y oculta el _id; {status: 0} los muestra todos menos status.
Arma un filtro con los botones y mira qué documentos coinciden y cómo se escribe.
Índices, réplicas y shards
MongoDB admite índices sobre cualquier campo, consultas de agregación (agrupar y sumar, como un GROUP BY), replicación con replica sets para alta disponibilidad y sharding automático para repartir colecciones enormes. Desde la versión 4.0 también tiene transacciones con varios documentos, con garantías ACID. Para cargar datos desde un archivo se usa mongoimport.
Antes de leer la respuesta
Los botones de abajo de la consola escriben el comienzo de la instrucción: complétala y presiona Enter. Con la flecha ↑ recuperas la anterior para corregirla.
Tu turno: la consola de MongoDB
Una consola de MongoDB con la base tienda y su colección inventory ya cargadas. Arriba ves los documentos; los que toca cada instrucción se iluminan.
Comprueba lo que entendiste
Cada respuesta incorrecta explica por qué parece correcta y en qué falla.