Как подсчитать и подсчитать несколько полей в зависимости от группы - PullRequest
0 голосов
/ 05 сентября 2018

Добрый день всем вам. У меня есть этот пример данных, которые я хочу сгруппировать.

{ 
"_id" : ObjectId("5b8de8e635da281e1cb6279b"), 
"CountryName" : "Spain", 
"SmartClassification": "Special Focus"
}
{ 
"_id" : ObjectId("5b8de8e635da281e1cb6279c"), 
"CountryName" : "Malaysia", 
"SmartClassification": "Investment Focus"
}
{ 
"_id" : ObjectId("5b8de8e635da281e1cb6279c"), 
"CountryName" : "Nigeria", 
"SmartClassification": "Fundamental Focus"
}

Вот иллюстрация того, что я хочу отобразить. enter image description here

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

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете попробовать ниже агрегации

В основном Вам необходимо использовать $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>
      )
    })}
  )
})
...