У меня есть коллекция A и несколько полей a, b, c, d ...
Если я сделаю:
db.A.aggregate([{$match: {a: true, b: false, c: false}, {$limit: 50}])
>> это быстро (0,1 с )
Теперь, если я сделаю
db.A.aggregate(
[
{
$lookup: {
from: 'B',
localField: 'b',
foreignField: '_id',
as: 'b'
}
},
{$match: {'b.d': true}},
{ $limit: 50 }
]
)
Это займет около 1,5 с (много документов, я в порядке с 1,5 с)
Теперь, если я сделаю то же самое как и раньше, но просто добавив $ match (который должен использовать индексы ...):
db.A.aggregate(
[
{$match: {a: true, b: false, c: false}},
{
$lookup: {
from: 'B',
localField: 'b',
foreignField: '_id',
as: 'b'
}
},
{$match: {'b.d': true}},
{ $limit: 50 }
]
)
Это займет 10 секунд? Я очень запутался, почему.
PS: у меня есть индекс для всех этих полей.