No estoy tan seguro de lo que quiere hacer con el resultado final, ya que las claves y los valores son los mismos. No obstante, puede usar el marco de agregación donde puede desnormalizar la matriz de valores incrustados usando $unwind
operador que lo aplana, es decir, produce una copia de cada documento por entrada de matriz.
Después de aplanar la matriz de valores, puede aplicar $group
operadores de acumulación sobre los valores para agregarlos. Una canalización final del $project
El operador daría forma a los campos de la agrupación anterior en el formato deseado.
Siga este ejemplo para obtener el concepto:
templateAttributes.aggregate([
{ "$match": { "platform": "V1" } },
{ "$unwind": "$available.Community.attributes.type.values" },
{
"$group": {
"_id": "$available.Community.attributes.type.values",
"value": { "$first": "$available.Community.attributes.type.values" }
}
},
{
"$project": {
"_id": 0,
"label": "$_id",
"value": 1
}
}
])
Ya que está usando Meteor, agregue meteor meteorhacks:aggregate
agregará soporte de agregación adecuado para Meteor para que pueda ejecutar la canalización de agregación anterior en su colección.