Добрый день всем вам. У меня есть образцы данных, которые я хочу сгруппировать.
{
"_id" : ObjectId("5b8de8e635da281e1cb6279b"),
"CountryName" : "Spain",
"SmartClassification": "Special Focus"
}
{
"_id" : ObjectId("5b8de8e635da281e1cb6279c"),
"CountryName" : "Malaysia",
"SmartClassification": "Investment Focus"
}
{
"_id" : ObjectId("5b8de8e635da281e1cb6279c"),
"CountryName" : "Nigeria",
"SmartClassification": "Fundamental Focus"
}
Вот иллюстрация того, что я хочу показать.

Я хочу $ сгруппировать данные выше по «CountryName» и общему количеству их «SmartClassification». Для меня это сложно, потому что я относительно новичок в MongoDB. Как я могу воспроизвести иллюстрацию выше?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете попробовать ниже агрегирование
В основном вам нужно использовать этап $group здесь несколько раз.
db.collection.aggregate([
{ "$group": {
"_id": {
"CountryName": "$CountryName",
"SmartClassification": "$SmartClassification"
},
"count": { "$sum": 1 }
}},
{ "$group": {
"_id": "$_id.CountryName",
"data": {
"$push": {
"SmartClassification": "$_id.SmartClassification",
"count": "$count"
}
}
}}
])
Данные, которые вы получите, будут примерно такими
const myData = [
{ "_id": "Spain", "data": [{ "SmartClassification": "Special Focus", "count": 1 }] },
{ "_id": "Malaysia", "data": [{ "SmartClassification": "Investment Focus", "count": 1 }] },
{ "_id": "Nigeria", "data": [{ "SmartClassification": "Fundamental Focus", "count": 2 }] }
]
Теперь вы можете перебирать данные и отображать что-то подобное на своей html-странице.
myData.map((country) => {
return(
<div>{country._id}</div>
{country.data.map((da) => {
return(
<div>{da.SmartClassification}</div>
<div>{da.count}</div>
)
})}
)
})
это даст вам данные, сгруппированные по CountryName и SmartClassification, затем вы можете перебрать вывод и показать, как вы отображаете на скриншоте
Большое спасибо. Это работает, я могу перебрать их все.
Привет @Anthony. Как я могу заставить вывод не отображать _id, а вместо этого отображать два свойства?