Проблема в использовании индексов в конвейере агрегации - PullRequest
0 голосов
/ 05 сентября 2018

У меня такой запрос

db.UserPosts.aggregate([
{ "$match" : { "Posts.DateTime" : { "$gte" : ISODate("2018-09-04T11:50:58Z"), "$lte" : ISODate("2018-09-05T11:50:58Z") } } }, 
{ "$match" : { "UserId" : { "$in" : [NUUID("aaaaaaaa-cccc-dddd-dddd-5369b183cccc"), NUUID("vvvvvvvv-bbbb-ffff-cccc-e0af0c8acccc")] } } },     
    { "$project" : { "_id" : 0, "UserId" : 1, "Posts" : 1 } }, 
    { "$unwind" : "$Posts" },     
    { "$unwind" : "$Posts.Comments" },     
    { "$sort" : {"Posts.DateTime" : -1} },     
    { "$skip" : 0 }, { "$limit" : 20 },
    { "$project" : { "_id" : 0, "UserId" : 1, "DateTime" : "$Posts.DateTime", "Title" : "$Posts.Title", "Type" : "$Posts.Comments.Type", "Comment" : "$Posts.Comments.Description" } },
    ],{allowDiskUse:true})

у меня составной индекс

{
    "Posts.DateTime" : -1,
    "UserId" : 1
}

Сообщения и комментарии являются массивом объектов. Я пробовал разные типы индексов, но проблема в том, что он не использует мой индекс на этапе $ sort. Я изменил место моего этапа сортировки $, но не увенчался успехом. Кажется, он работает в $ match, но не установлен в $ sort. Я даже попробовал 2 простых индекса на этих полях и комбинацию 2 простых индексов и одного составного индекса, но ни один из них не работает. Я также прочитал соответствующие документы на сайте MongoDB для

  • Составные индексы
  • Использование индексов для сортировки результатов запроса
  • Пересечение указателей
  • Оптимизация агрегации трубопроводов

Может кто-нибудь помочь мне найти решение?

1 Ответ

0 голосов
/ 25 сентября 2018

Я решил эту проблему, изменив модель данных и переместив DateTime на более высокий уровень данных.

...