MongoDB разница между сортировкой в ​​агрегации и поиском - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть один сложный запрос, он содержит несколько «этапов» (сопоставление, сортировка, смещение, лимит), но когда я выполняю его в конвейере агрегации, это занимает 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
    }
  }
}
...