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
}
}
})