У меня есть коллекции с огромным количеством документов, по которым мне нужно выполнять пользовательский поиск по различным запросам.
Каждый документ имеет логическое свойство. Давайте назовем это "isInTop".
Мне нужно показать документы, которые имеют это свойство первым во всех запросах.
Да. Я могу легко сделать сортировку в этой области, как:
.sort( { isInTop: -1 } );
И создайте правильный индекс с полем "isInTop" в качестве последнего поля в нем. Но это будет работать медленно, так как индексы в монго лучше всего работают с уникальными полями .
Так есть ли решение для отображения документов с полем "isInTop" в верхней части каждого запроса?
Я вижу два решения здесь.
Во-первых: установите документы, которые должны быть в верхней части _id из "будущего". Как вы знаете, ObjectId содержит метку времени. Таким образом, я могу создать ObjectId с отметкой времени из будущего и использовать естественный порядок
Второе: создать отдельную коллекцию для Ducuments, которая должна быть в топе. И сначала делайте в нем запросы.
Есть ли другие способы решения этой проблемы? Что будет работать лучше?
UPDATE
Я сделал эту проблему с сортировкой по настраиваемому полю, которое представляет ранг.