Unir colecciones con $lookup
Junta en una consulta documentos de dos colecciones.
Junta documentos de dos colecciones en una sola consulta con $lookup, como un join.
Requisitos
- Una conexión con un usuario que tenga
readsobre la base. Sobre las dos colecciones.
Unir por un campo
JavaScript
db.pedidos.aggregate([
{ $match: { estado: "pagado" } },
{ $lookup: { from: "clientes", localField: "cliente", foreignField: "_id", as: "datosCliente" } },
{ $unwind: "$datosCliente" },
]);Unir con condiciones propias
JavaScript
db.clientes.aggregate([
{
$lookup: {
from: "pedidos",
let: { id: "$_id" },
pipeline: [{ $match: { $expr: { $eq: ["$cliente", "$$id"] } } }, { $limit: 5 }],
as: "ultimos",
},
},
]);Comprobar
Cada documento del resultado lleva en datosCliente el documento del cliente de su pedido, sacado de clientes.
Problemas frecuentes
- La unión tarda porque
foreignFieldno tiene índice en la otra colección. Crea uno sobre ese campo.