La entrada es un documento de una vez
{ "name": [ "abc", "xyz" ], "values": [ "123", "100" ] } La explicación Quiero normalizar la matriz en varios documentos, abc y xyz vienen dinámicamente, estos son parámetros definidos por el usuario
Rendimiento esperado
[ { "data": { "name": "abc", "values": "123" } }, { "data": { "name": "xyz", "values": "100" } } ];Lo que quieres hacer es usar $zip , así:
db.collection.aggregate([ { $project: { data: { $map: { input: { $zip: { inputs: [ "$name", "$values" ] } }, as: "zipped", in: { name: { "$arrayElemAt": [ "$$zipped", 0 ] }, values: { "$arrayElemAt": [ "$$zipped", 1 ] } } } } } }, { $unwind: "$data" }, { $replaceRoot: { newRoot: { data: "$data" } } } ])Prueba esto:
db.testCollection.aggregate([ { $project: { "data": { $map: { input: { $zip: { inputs: ["$name", "$values"] } }, as: "item", in: { name: { $arrayElemAt: ["$$item", 0] }, values: { $arrayElemAt: ["$$item", 1] } } } } } }, { $unwind: "$data" } ]);