El operador $lookup en MongoDB se utiliza para realizar operaciones de agregación y combinar documentos de dos colecciones en una sola consulta. Es especialmente útil cuando necesitas recuperar información de múltiples colecciones y combinarla en un solo resultado.
Crear una consulta de agregación con $lookup
A continuación, crearemos una consulta de agregación que utiliza el operador $lookup. Imaginemos que tenemos dos colecciones, una llamada "usuarios" y otra llamada "órdenes". Queremos combinar información de ambas colecciones en una sola consulta.
Node.js:
async function realizarAgregacion() { const pipeline = [ { $lookup: { from: "ordenes", // Nombre de la segunda colección localField: "usuarioId", // Campo local en la colección actual foreignField: "usuarioId", // Campo en la colección "ordenes" as: "ordenesCombinadas" // Alias para los resultados combinados } } ]; const collection = client.db("tu_base_de_datos").collection("usuarios"); const resultado = await collection.aggregate(pipeline).toArray(); console.log("Resultados de la agregación:", resultado); } realizarAgregacion();
En este ejemplo, estamos utilizando $lookup para combinar documentos de la colección "usuarios" con documentos de la colección "ordenes" en función del campo usuarioId. Los resultados combinados se almacenan en un campo llamado "ordenesCombinadas".
Ejecutar la consulta de agregación
Ejecuta la consulta de agregación que hemos definido. Esta consulta recuperará documentos de la colección "usuarios" y combinará información de la colección "ordenes" basándose en el campo usuarioId.
Nota:
- Asegúrate de que los nombres de las colecciones, los campos localField y foreignField, y los alias (as) coincidan con tu base de datos y tu caso de uso específico.
El operador $lookup es una herramienta poderosa para combinar datos de múltiples colecciones en MongoDB. Puedes personalizar la consulta de agregación según tus necesidades específicas. Además, puedes realizar otras etapas de agregación para refinar y dar forma a los resultados según lo necesites.