Не можете да създадете индекс, който работи по начина, по който сте го описали. Няма начин да се „индексира“ един от изходите на стъпка на конвейер, когато се изпълнява агрегиране.
Има няколко оператора за агрегиране, с които могат да работят Индекси за събиране на MongoDB .
В момента те включват:$match
, $sort
, $limit
и $skip
.
Като $match
е едно от тях, ефективността на заявката за агрегиране, която сте написали, може да се подобри чрез деклариране на съставен индекс на двете полета, особено след като сте поставили правилно $match
в началото на конвейера:
db.theCollection.ensureIndex({user: 1, type: 1})
$group
стъпка в конвейера ще вземе резултатите от $match
и в идеалния случай бъдете относително бързи. :)