🔍 Búsqueda avanzada (Search)

Búsqueda avanzada en MongoDB

🔍 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 $and y $or facilita consultas complejas.
  • El pipeline de agregación es útil para búsquedas avanzadas, ordenamiento y transformación de datos.

Publicar un comentario

0 Comentarios