Una API útil no solo “lista todo”: necesita filtros. En MongoDB, filtras con objetos de consulta y operadores.
1) Filtro por igualdad
// Todos los eventos con título exacto
Event.find({ title: "Demo" })
2) Operadores comunes
$gte/$lte: rango (mayor/menor o igual)$in: pertenece a lista$regex: texto (simple)
// Duración entre 30 y 120
Event.find({ durationMin: { $gte: 30, $lte: 120 } })
3) Ordenar resultados
// Por fecha ascendente
Event.find().sort({ date: 1 })
4) Paginación básica
const page = 1;
const pageSize = 10;
Event.find()
.sort({ date: 1 })
.skip((page - 1) * pageSize)
.limit(pageSize);
5) Aplicarlo a un endpoint
router.get("/", async (req, res) => {
const { minDur, maxDur } = req.query;
const filter = {};
if (minDur || maxDur) {
filter.durationMin = {};
if (minDur) filter.durationMin.$gte = Number(minDur);
if (maxDur) filter.durationMin.$lte = Number(maxDur);
}
const items = await Event.find(filter).sort({ date: 1 }).limit(100);
res.json(items);
});
6) Recomendación
Cuando un filtro se use mucho, considera índices. Y si el texto es importante, usa índices de texto o búsquedas más avanzadas (según proyecto).
