MongoDb $ group и оптимизация $ sort - PullRequest
0 голосов
/ 06 марта 2020

У меня большая коллекция.

{
        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 секунд. Подскажите, как мне оптимизировать запрос?

...