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:

  1. Encuentra todos los unicornios femeninos
  2. Encuentra unicornios que pesan menos de 500
  3. Encuentra unicornios que aman limones
  4. Encuentra unicornios con más de 50 vampiros matados
  5. Ordena todos los unicornios por peso de mayor a menor
  6. Encuentra el unicornio más ligero

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Desafíos de programación atemporales y multiparadigmáticos

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.

Buy the book

Will you buy me a coffee?

Comments

There are no comments yet.

Visitors in real time

You are alone: 🐱