У меня такой запрос
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 для
- Составные индексы
- Использование индексов для сортировки результатов запроса
- Пересечение указателей
- Оптимизация агрегации трубопроводов
Может кто-нибудь помочь мне найти решение?