5. Consultas y filtros
MongoDB tiene operadores muy potentes para filtrar datos.
Operadores de comparación
Los operadores de comparación funcionan de manera similar a SQL:
- $eq: igual a
- $ne: no igual a
- $gt: mayor que
- $gte: mayor o igual que
- $lt: menor que
- $lte: menor o igual que
// Unicornios con más de 100 vampiros
db.unicorns.find({ vampires: { $gt: 100 } })
// Unicornios con 50 vampiros o menos
db.unicorns.find({ vampires: { $lte: 50 } })
// Unicornios que NO son machos
db.unicorns.find({ gender: { $ne: 'm' } })
Operadores lógicos
Para combinar condiciones:
AND implícito (separando con comas):
db.unicorns.find({
gender: 'f',
weight: { $gt: 400 }
})
OR explícito (con $or):
db.unicorns.find({
$or: [
{ weight: { $lt: 500 } },
{ vampires: { $gt: 100 } }
]
})
Combinando AND y OR:
db.unicorns.find({
gender: 'f',
$or: [
{ weight: { $lt: 500 } },
{ vampires: { $lt: 50 } }
]
})
El operador $in
Para buscar valores en un array:
// Unicornios de Madrid o Barcelona
db.users.find({
city: { $in: ['Madrid', 'Barcelona'] }
})
El operador $nin es lo contrario (not in):
db.users.find({
city: { $nin: ['Madrid', 'Barcelona'] }
})
Búsquedas en arrays
MongoDB trata los arrays de forma especial. Si un campo es un array, puedes buscar si contiene un valor:
// Unicornios que aman las zanahorias
db.unicorns.find({ loves: 'carrot' })
Esto funciona aunque loves sea un array. MongoDB busca si 'carrot' está en el array.
Para buscar documentos con valores específicos en arrays:
// Unicornios que aman manzanas O naranjas
db.unicorns.find({
loves: { $in: ['apple', 'orange'] }
})
Ordenar resultados
Usa sort para ordenar:
// Por peso descendente
db.unicorns.find().sort({ weight: -1 })
// Por género ascendente, luego vampiros descendente
db.unicorns.find().sort({ gender: 1, vampires: -1 })
- 1 = orden ascendente
- -1 = orden descendente
Limitar resultados
Usa limit para obtener solo los primeros N resultados:
// Los 3 unicornios más pesados
db.unicorns.find().sort({ weight: -1 }).limit(3)
Usa skip para saltar resultados:
// Salta los primeros 5 y devuelve los siguientes 3
db.unicorns.find().skip(5).limit(3)
Contar documentos
Para contar documentos que coinciden con un filtro:
db.unicorns.countDocuments({ vampires: { $gt: 50 } })
El operador $exists
Para buscar documentos que tienen (o no tienen) un campo:
// Documentos que tienen el campo 'vampires'
db.unicorns.find({ vampires: { $exists: true } })
// Documentos que NO tienen el campo 'vampires'
db.unicorns.find({ vampires: { $exists: false } })
Actividad 1
Inserta estos unicornios en tu base de datos:
db.unicorns.insertMany([
{ name: 'Solnara', gender: 'f', weight: 550, loves: ['apple', 'carrot', 'chocolate'], vampires: 80 },
{ name: 'Ayna', gender: 'f', weight: 733, loves: ['strawberry', 'lemon'], vampires: 40 },
{ name: 'Kenny', gender: 'm', weight: 690, loves: ['grape', 'lemon'], vampires: 39 },
{ name: 'Raleigh', gender: 'm', weight: 421, loves: ['apple', 'sugar'], vampires: 2 }
])
Ahora realiza estas consultas:
- Encuentra todos los unicornios femeninos
- Encuentra unicornios que pesan menos de 500
- Encuentra unicornios que aman limones
- Encuentra unicornios con más de 50 vampiros matados
- Ordena todos los unicornios por peso de mayor a menor
- Encuentra el unicornio más ligero
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Desafíos de programación atemporales y multiparadigmáticos
Te encuentras ante un librillo de actividades, divididas en 2 niveles de dificultad. Te enfrentarás a los casos más comunes que te puedes encontrar en pruebas técnicas o aprender conceptos elementales de programación.
Comprar el libro
Comentarios
Todavía no hay ningún comentario.