#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
}
}
])
Пример здесь