¿Cómo unir tres colecciones (múltiples) con $ lookup en mongodb?
Hola, estoy buscando unir datos de tres colecciones.
colección de usuarios:
[ { _id:0, name:"abc", phone:999999999 }, { _id:1, name:"xyz", phone:888888888 }, ]colección de productos:
[ { _id:"p01", name:"product-name", price:1200 }, { _id:"p02", name:"product-name1", price:100 } ]colección de reseñas de productos:
[ { _id:"pr0", userId:0, productId:"p01", star:4 }, { _id:"pr1", userId:1, productId:"p01", star:3 } ]consulta mongodb:
product.aggregate([ { $lookup: { from: "productreviews", localField: "_id", foreignField: "productId", as: "review", }, }, { $lookup: { from: "users", localField: "review.userId", foreignField: "_id", as: "review.userInfo", }, }, ])No puedo obtener la salida que necesito. ¿Cómo puedo obtener este siguiente resultado:
{ product: [ { _id: "p01", name: "product-name", price: 1200, review: [ { _id: "pr0", userId: 0, productId: "p01", star: 4, "userInfo": { name: "abc", phone: 999999999 } }, { _id: "pr1", userId: 1, productId: "p01", star: 3, "userInfo": { "name": "xyz", "phone": 888888888, } }, ] }, { _id: "p02", name: "product-name1", price: 100, }, ] }Cualquier ayuda apreciada!. Gracias...
db.product.aggregate([ { $lookup: { from: "review", localField: "_id", foreignField: "productId", as: "review", }, }, { $lookup: { from: "users", localField: "review.userId", //See here foreignField: "_id", as: "review.userInfo", }, }, ])El nombre del campo local es ID de usuario en la segunda búsqueda.
EDITAR:
Para conservar reseñas también
Agregar una etapa de relajación
db.product.aggregate([ { $lookup: { from: "review", localField: "_id", foreignField: "productId", as: "review", }, }, { "$unwind": "$review" }, { $lookup: { from: "users", localField: "review.userId", foreignField: "_id", as: "review.userInfo", }, }, ])Para mantener los documentos donde no hay coincidencia, conserve las matrices nulas en la etapa de desenrollado como se muestra a continuación
{ $unwind: { path: "$review", "preserveNullAndEmptyArrays": true } }