Това е късен отговор, но от $group
в Mongo от версия 4.0 все още няма да използва индекси, може да е полезно за други.
За да ускорите значително агрегирането си, извършете $sort
преди $group
.
Така че вашата заявка ще бъде:
db.ads_view.aggregate({$sort:{"campaign":1}},{$group: {_id : "$campaign", "action" : {$sum: 1} }});
Това предполага индекс на campaign
, който трябваше да бъде създаден според вашия въпрос. В Mongo 4.0 създайте индекса с db.ads_view.createIndex({campaign:1})
.
Тествах това в колекция, съдържаща 5,5+ милиона. документи. Без $sort
, агрегацията не би приключила дори след няколко часа; с $sort
предхождащ $group
, агрегирането отнема няколко секунди.