Я создал монго-представление, которое в основном предназначается для документов в коллекции «учетных записей» - особенно там, где значение для «Transactions.amount.balance» больше нуля. Так это выглядит так:
{"transactions.amounts.balance": { $gt : 0 }}
Теперь, поскольку результаты возвращались долго, я добавил индекс в это поле в коллекцию, с которой работает это представление. Впоследствии, когда я запускаю этот запрос к коллекции, результаты теперь возвращаются гораздо быстрее - менее чем за секунду, а не за 9 секунд до добавления индекса.
Однако, тем не менее, я, похоже, не замечаю того же улучшения производительности в созданном мной монго-представлении, которое, опять же, среди прочего, воссоздает этот же запрос в той же коллекции.
Насколько я понимаю, представление будет наследовать все индексы, созданные в целевой коллекции. Итак, если это так, почему я не вижу какого-либо улучшения производительности в представлении Монго? Я что-то упустил?
Кстати, когда я проверяю вход и выход каждого этапа моего конвейера агрегации, то, конечно, это тот, который возвращает около 9 секунд, чтобы вернуть результаты:
{ "transactions.amounts.balance" : { "$gt" : 0.0 } }
Почему этот шаг запроса, на мой взгляд, намного медленнее, чем когда он запускается непосредственно для целевого набора? Есть ли что-то еще, что я могу помочь ускорить выполнение этого шага запроса?
Вот первые несколько шагов конвейера агрегации в моем представлении Монго:
db.accounts.aggregate(
// Pipeline
[
// Stage 1
{
$unwind: {
"path": "$transactions"
}
},
// Stage 2
{
$match: {
"transactions.amounts.balance": {
"$gt": 0.0
}
}
},
// Stage 3
{
$addFields: {
"openBalance": "$transactions.amounts.balance"
}
}