несколько этапов агрегации (match, sort, project), при этом в составлении запроса для match используется 2 отдельных запроса к базе для получения промежуточных данных.
После агрегации происходит populate
Нужно добавить фильтрацию по полям, которые получаются через populate, для этого я решил populate заменить на несколько lookup'ов (4) помещенных в начало агрегации. Но в результате время выполнения запроса неприятно выросло.
Понимаю, что причина этого в том, что все lookup'ы выполняются над всей коллекцией последовательно, но не знаю, на что можно их заменить, чтобы уменьшить время обработки запроса.
Может есть уже проверенные временем подходы оптимальные или кто-то сталкивался с подобного рода проблемами?
пересматривай структуру данных, надо избавляться от 4х лукапов у меня похожая проблема полгода назад была. пробовал и через facet, и на уровне кода асинком кидаться, только изменяя структуру данных удалось ускориться
Структуру данных поменять навряд ли выйдет, так как время на это никто выделять не будет)
ну если не будет выделять, пусть тогда запросы по 5 секунд работают у них
Обсуждают сегодня