Volver a MongoDB Básico

Consultas en MongoDB

Operadores de Consulta

// Comparación db.productos.find({ precio: { $gt: 100, $lte: 500 }, stock: { $ne: 0 } }) // Operadores lógicos db.productos.find({ $and: [ { categoria: "Electrónica" }, { $or: [{ precio: { $lt: 100 } }, { en_oferta: true }] } ] }) // Existencia de campo y tipo db.docs.find({ telefono: { $exists: true } }) db.docs.find({ edad: { $type: "int" } }) // Operadores de array db.publicaciones.find({ etiquetas: { $in: ["javascript", "typescript"] } }) db.publicaciones.find({ etiquetas: { $all: ["javascript", "frontend"] } }) db.publicaciones.find({ etiquetas: { $size: 3 } }) // Regex db.usuarios.find({ nombre: { $regex: /^ali/i } })

Proyecciones

// 1 = incluir, 0 = excluir db.usuarios.find( { edad: { $gte: 18 } }, { nombre: 1, email: 1, _id: 0 } ) // Campo de documento anidado db.usuarios.find({}, { "direccion.ciudad": 1, nombre: 1 }) // Slice: primeros 3 comentarios db.publicaciones.find({}, { comentarios: { $slice: 3 } })

Ordenar, Limitar y Saltar

// Ordenar por precio desc, luego nombre asc db.productos.find().sort({ precio: -1, nombre: 1 }) // Paginación con offset const TAMANO_PAGINA = 20; const pagina = 2; db.productos .find({ categoria: "Electrónica" }) .sort({ _id: 1 }) .skip((pagina - 1) * TAMANO_PAGINA) .limit(TAMANO_PAGINA) // Paginación con cursor (mejor rendimiento) db.productos .find({ _id: { $gt: ultimoIdVisto } }) .sort({ _id: 1 }) .limit(20)

Consultas en Documentos Anidados

// Notación de punto db.pedidos.find({ "direccion.pais": "MX" }) // Consulta en array de objetos db.pedidos.find({ "items.productoId": ObjectId("...") }) // $elemMatch: múltiples condiciones en el mismo elemento del array db.pedidos.find({ items: { $elemMatch: { productoId: ObjectId("..."), cantidad: { $gte: 2 } } } })

Búsqueda de Texto

// Crear índice de texto db.articulos.createIndex({ titulo: "text", cuerpo: "text" }) // Buscar db.articulos.find({ $text: { $search: "mongodb base de datos" } }) // Ordenar por relevancia db.articulos.find( { $text: { $search: "mongodb rendimiento" } }, { score: { $meta: "textScore" } } ).sort({ score: { $meta: "textScore" } })

Consultas Geoespaciales

// Almacenar punto GeoJSON db.tiendas.insertOne({ nombre: "Tienda Centro", ubicacion: { type: "Point", coordinates: [-99.1332, 19.4326] } }) db.tiendas.createIndex({ ubicacion: "2dsphere" }) // Encontrar tiendas en radio de 1km db.tiendas.find({ ubicacion: { $nearSphere: { $geometry: { type: "Point", coordinates: [-99.1332, 19.4326] }, $maxDistance: 1000 // metros } } })