#mongodb #aggregation-framework
#mongodb #агрегация-фреймворк
Вопрос:
здесь у меня есть массив повторяющихся элементов, подобных этому
[
'gg',
'bb',
'dd',
'cc',
'll',
'aa',
'cc',
'gg',
'bb',
'dd',
'cc',
'bb',
'dd',
'll',
'aa',
]
и то, что я готов вернуть, выглядит следующим образом
{
'gg': 2,
'bb': 3,
'dd': 3,
'cc': 2,
'll': 2,
'aa': 2,
}
Можно ли это сделать с помощью агрегации MongoDB??? Ценю любую помощь
Ответ №1:
Используйте $unwind и $group в качестве этапов конвейерной обработки агрегации:
Запрос:
db.collection.aggregate([
{
$unwind: "$items"
},
{
$group: {
_id: "$items",
count: {
$sum: 1
}
}
}
])
Результат:
{
"_id": "ll",
"count": 2
},
{
"_id": "gg",
"count": 2
},
{
"_id": "bb",
"count": 3
},
{
"_id": "cc",
"count": 3
},
{
"_id": "aa",
"count": 2
},
{
"_id": "dd",
"count": 3
}
Ответ №2:
Это также работает действительно хорошо…
db.users.aggregate([
{
$group: {
_id: "$email",
count: { $sum: 1 }
}
},
{
$match: {
count: { $gt: 1 }
}
}
])
Вывод:
{ "_id" : "a@gmail.com", "count" : 2 }
{ "_id" : "b@gmail.com", "count" : 2 }
{ "_id" : "c@gmaiL.com", "count" : 8 }
{ "_id" : "d@gmail.com", "count" : 2 }
{ "_id" : "e@gmail.com", "count" : 2 }
{ "_id" : "f@gmail.com", "count" : 2 }