У меня есть один сложный запрос, он содержит несколько «этапов» (сопоставление, сортировка, смещение, лимит), но когда я выполняю его в конвейере агрегации, это занимает 10 минут, а в find (...). Skip.limit . сортировка занимает всего 0,5 секунды, почему так работает?
Дополнительная информация:
Размер коллекции: 20 000 000
Размер хранилища: 33 ГБ
Индексы: 16
Средний размер документа : 6kb
Документ имеет сложную структуру с большим количеством внутренних объектов и массивов.
пример этапа поиска / поиска (все поля в запросе проиндексированы):
{
"Target._id":{
"$in":[
CSUUID("73aedf6b-dba7-4905-5187-08d7d623e1a0")
]
},
"StartDateTime":{
"$gte":ISODate("2020-03-31T21:00:00Z"),
"$lte":ISODate("9999-12-30T22:00:00Z")
},
"$expr":{
"$switch":{
"branches":[
{
"case":{
"$and":[
{
"$gte":[
"$StartDateTime",
ISODate("2020-03-31T21:00:00Z")
]
},
{
"$lte":[
"$StartDateTime",
ISODate("9999-12-30T22:00:00Z")
]
},
{
"$in":[
"$Target._id",
[
CSUUID("73aedf6b-dba7-4905-5187-08d7d623e1a0")
]
]
}
]
},
"then":true
}
],
"default":false
}
}
}