Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

312
Views
¿Cómo unir tres colecciones (múltiples) con $ lookup en mongodb?

¿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...

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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.

patio de juegos

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", }, }, ])

Actualizar

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 } }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!