В последнее время я занимаюсь оптимизацией производительности конвейера агрегации.Я столкнулся с этой проблемой, когда решал, что индексироватьЯ установил составной индекс для {'receiverId': 1,'type': 1 }
.Мой оригинальный конвейер выглядит так.Я думаю, нужно ли индексировать isRead
тоже.Причина, по которой я не создал составной индекс из трех полей, потому что другие запросы используют только recieverId
и type
.
notifications.aggregate([{
$match: {
'recieverId': ObjectId(xxx),
'type': xxx,
'isRead': false
}
},
{
...
},
], (err, result) => {
return res.status(200).json(result);
});
Итак, я изменил это ниже.Интересно, может ли такой конвейер сэкономить некоторые вычислительные затраты после фильтрации recieverId
и type
.Будет ли isRead
, второй $match
фильтр от результата первого $match
?
notifications.aggregate([{
$match: {
'recieverId': ObjectId(xxx),
'type': xxx,
}
},
{
$match: {
'isRead': false
}
},
{
...
},
], (err, result) => {
return res.status(200).json(result);
});