🔍 Búsqueda avanzada (Search)
MongoDB ofrece herramientas poderosas para realizar búsquedas más allá de los filtros básicos. Esto incluye búsquedas de texto, rangos, patrones y combinaciones complejas de condiciones.
🔹 1️⃣ Búsqueda de texto con índices de texto
Para realizar búsquedas de palabras clave dentro de campos de texto, se puede crear un índice de texto:
// Crear índice de texto db.productos.createIndex({ nombre: "text", descripcion: "text" }); // Buscar documentos que contengan la palabra "teclado" db.productos.find({ $text: { $search: "teclado" } });
Los índices de texto permiten buscar en múltiples campos y aplicar relevancia mediante puntuaciones.
🔹 2️⃣ Búsqueda por rangos y comparaciones
Puedes filtrar documentos utilizando operadores como $gt, $lt, $gte, $lte:
// Buscar productos con precio entre 50 y 150
db.productos.find({
precio: { $gte: 50, $lte: 150 }
});
🔹 3️⃣ Búsqueda con expresiones regulares
Las expresiones regulares permiten buscar patrones en cadenas de texto:
// Buscar productos cuyo nombre empiece con "Teclado"
db.productos.find({
nombre: { $regex: "^Teclado", $options: "i" } // "i" para ignorar mayúsculas/minúsculas
});
🔹 4️⃣ Combinación de condiciones (AND/OR)
Para consultas más complejas, puedes combinar múltiples filtros:
// AND implícito (todas las condiciones deben cumplirse)
db.productos.find({ categoria: "periféricos", stock: { $gt: 0 } });
// OR explícito
db.productos.find({
$or: [
{ categoria: "periféricos" },
{ precio: { $lt: 20 } }
]
});
🔹 5️⃣ Búsqueda avanzada con agregaciones
Para consultas complejas que incluyan filtrado, transformación y ordenamiento, se recomienda el pipeline de agregación:
// Buscar productos disponibles y ordenar por precio
db.productos.aggregate([
{ $match: { stock: { $gt: 0 } } },
{ $sort: { precio: 1 } },
{ $project: { nombre: 1, precio: 1, stock: 1 } }
]);
🧭 6️⃣ Buenas prácticas de búsqueda avanzada
- Crea índices adecuados para campos que uses frecuentemente en búsquedas.
- Evita escanear toda la colección con consultas sin índices.
- Usa operadores $text y expresiones regulares solo cuando sea necesario, ya que algunas búsquedas regex pueden ser lentas.
- Combina filtros simples y agregaciones para mejorar eficiencia.
- Revisa siempre el plan de ejecución con
explain()para identificar cuellos de botella.
🧭 7️⃣ Resumen rápido
- Los índices de texto permiten búsquedas por palabras clave en campos de texto.
- Los operadores de comparación y rangos filtran documentos según valores numéricos o fechas.
- Las expresiones regulares permiten buscar patrones en cadenas.
- Combinar condiciones con
$andy$orfacilita consultas complejas. - El pipeline de agregación es útil para búsquedas avanzadas, ordenamiento y transformación de datos.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias