У меня большая коллекция.
{
name: 'Student1',
words: [
'how',
'translate',
]
},
{
name: 'Student2',
words: [
'by',
]
}
{
name: 'Student1',
words: [
'I',
'on',
'the',
]
}
{
name: 'Student3',
words: [
'this',
'the',
]
}
и запрос в форме:
col.aggregate([
{
$match: {
...
},
},
{
$group: {
_id: '$name',
words: { $push: '$words' },
},
},
{
$addFields: {
words: {
$reduce: {
input: '$words',
initialValue: [],
in: { $setUnion: ['$$value', '$$this'] },
},
},
},
}
{
$project: {
amount: {$size: { $ifNull: [ '$words', [] ] } },
},
},
{
$sort: {amount: -1},
},
{
$limit: limit,
},
])
Мне нужно вывести студентов с наибольшим количеством слов в массиве. но для больших объемов данных запрос очень длинный. Если убрать $ sort - запрос отрабатывает за 1 секунду. С сортировкой $ 25 секунд. Подскажите, как мне оптимизировать запрос?