To spóźniona odpowiedź, ale ponieważ $group
w Mongo od wersji 4.0 nadal nie będzie korzystał z indeksów, może to być pomocne dla innych.
Aby znacznie przyspieszyć agregację, wykonaj $sort
przed $group
.
Twoje zapytanie będzie wyglądało następująco:
db.ads_view.aggregate({$sort:{"campaign":1}},{$group: {_id : "$campaign", "action" : {$sum: 1} }});
Zakłada to indeks campaign
, który powinien zostać utworzony zgodnie z Twoim pytaniem. W Mongo 4.0 utwórz indeks za pomocą db.ads_view.createIndex({campaign:1})
.
Przetestowałem to na kolekcji zawierającej ponad 5,5 mln. dokumenty. Bez $sort
, agregacja nie zakończyłaby się nawet po kilku godzinach; z $sort
poprzedzający $group
, agregacja zajmuje kilka sekund.