Подсчитать количество повторяющихся элементов в MongoDB

#mongodb #count #duplicates #aggregation

Вопрос:

У меня есть ошибка сбора в mongodb:

 {
    "Id": "5",
    "Group": [
        {
            "Name": "frank",
            "Roll": "123"
        }
    ]
},
{
    "Id": "6",
    "Group": [
        {
            "Name": "John",
            "Roll": "124"
        }
    ]
},
{
    "Id": "7",
    "Group": [
        {
            "Name": "John",
            "Roll": "125"
        }
    ]
}
 

Имя «Джон» появляется дважды. Я хотел бы отобразить количество каждого имени, которое появляется более одного раза:

 {"Name": "John", "Count":2 }
 

Ответ №1:

Вы можете использовать этот запрос агрегации:

  • Сначала $unwind нужно деконструировать массив и получить все значения как объект.
  • Затем сгруппируйте по имени и $sum по 1 для каждого имени.
  • А затем $match , чтобы получить те значения, которые существуют более одного раза (т. Е. Повторяются)
  • И последний этап — вывести нужные вам значения, в данном случае Name и Count .
 db.collection.aggregate([
  {
    "$unwind": "$Group"
  },
  {
    "$group": {
      "_id": "$Group.Name",
      "Count": {
        "$sum": 1
      },
      
    }
  },
  {
    "$match": {
      "Count": {
        "$gt": 1
      }
    }
  },
  {
    "$project": {
      "_id": 0,
      "Name": "$_id",
      "Count": 1
    }
  }
])
 

Пример здесь