tengo 3 colecciones en mongoDB con la siguiente estructura
Usuarios:
"name":"" "email":"" "phone":"" "city":"" "customerID":""
Buques:
"address":"" "city":"" "pincode":"" "porderID":"" "customerID":""
Pedidos:
"productName":"" "quantity":"" "pricing":"" "mrp":"" "porderID":"" "customerID":""
¿Cómo escribo una solicitud de obtención o una función agregada que devuelve todos los ID de cliente en un json como este?
[{ customerID:"", BuyOrder:[{ porderID:"", productName:"", quantity:"" ShipmentDetail:[ address:"" city:"" pincode:"" ] }], customerID:"", BuyOrder:[{ porderID:"", productName:"", quantity:"" ShipmentDetail:[ address:"" city:"" pincode:"" ] }], }]
Cualquier sugerencia sería útil.
No está muy claro qué es lo que quieres... sin un ejemplo de entrada/salida, sin un JSON válido... no es fácil, pero creo que estás buscando algo como esto:
Esta consulta es una $lookup
anidada en la que cada usuario se une a la colección con orders
mediante el ID de customerID
y, además, los pedidos se unen a los ships
mediante el ID de customerID
.
db.users.aggregate([ { "$lookup": { "from": "orders", "localField": "customerID", "foreignField": "customerID", "as": "BuyOrder", "pipeline": [ { "$lookup": { "from": "ships", "localField": "customerID", "foreignField": "customerID", "as": "ShipmentDetail" } } ] } }, ])
Ejemplo aquí
También puede agregar una etapa $project
para generar solo los campos que desee, como este ejemplo donde el resultado es:
[ { "BuyOrder": [ { "ShipmentDetail": [ { "address": "", "city": "", "pincode": "" } ], "porderID": "", "pricing": "", "productName": "", "quantity": "" } ], "customerID": "" } ]