Nie jestem pewien, co chcesz zrobić z wynikiem końcowym, ponieważ klucze i wartości są takie same. Niemniej jednak można użyć struktury agregacji, w której można zdenormalizować tablicę wartości osadzonych za pomocą $unwind
operator, który spłaszcza go, tj. tworzy kopię każdego dokumentu na wpis w tablicy.
Po spłaszczeniu tablicy wartości możesz zastosować $group
operatorów akumulacji na wartościach, aby je zagregować. Ostatni potok $project
operator ukształtuje pola z poprzedniego grupowania w żądany format.
Postępuj zgodnie z tym przykładem, aby uzyskać koncepcję:
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
}
}
])
Ponieważ używasz Meteora, meteor dodaje meteorhacks:aggregate
doda odpowiednią obsługę agregacji dla Meteora, dzięki czemu możesz uruchomić powyższy potok agregacji w swojej kolekcji.