Tengo un documento que se parece a esto:
{ "_id": "some_uuid", "inv": { "food01": "id01", "food02": "id02", "food03": "id03" }, "food": { "id01": { "n": "apple" }, "id02": { "n": "banana" }, "id03": { "n": "pear" } } }Quiero usar Mongodb Aggregate para recuperar el siguiente resultado.
Rendimiento esperado
{ "_id": "some_uuid", "inv": { "food01": "apple", "food02": "banana", "food03": "pear" } }Alguien me puede orientar como hacer esto? ¡Gracias!
Una opción es usar $objectToArray para dar formato a estos campos como matrices, lo que permitirá usar $map y $filter para que coincidan:
db.collection.aggregate([ {$set: {inv: {$objectToArray: "$inv"}, food: {$objectToArray: "$food"}}}, { $project: { inv: {$map: { input: "$inv", in: { k: "$$this.k", v: { $filter: { input: "$food", as: "food", cond: {$eq: ["$$this.v", "$$food.k"]} } } } } } } }, { $project: { inv: { $map: { input: "$inv", in: {k: "$$this.k", v: {$first: "$$this.vvn"}} } } } }, {$project: {inv: {$arrayToObject: "$inv"}}} ])Vea cómo funciona en el ejemplo del patio de recreo