Производительность сортировки MongoDB при использовании с $ в запросе - PullRequest
0 голосов
/ 25 июня 2019

У меня есть коллекция product в моей БД.Ниже приведен пример документа:

{
"sku_id":"12345678",
"priduct_name":"milk",
"product_rank":3,
"product_price": 2.4
}

В нашей коллекции 100 тыс. Таких уникальных документов.Я хочу запросить эту коллекцию, используя запрос $in, как показано ниже.

db.product.find({"sku_id" :{$in :["12345678","23213"]}}).sort( { product_rank: 1 } )

Наше требование заключается в поиске документов на основе запроса $in и сортировке любого поля в документе (asc или desc).Я создал как прямой, так и обратный индекс для всех полей для этой коллекции.

Примечание: этот sku_id массив внутри $in запроса может иметь 1000+ sku_ids.

Я сомневаюсь, что я использую фильтр как $in с массивом sku_id иполучить отсортированный результат по любому полю, будет ли он использовать индекс для сортировки или будет сортироваться во время запроса?

1 Ответ

1 голос
/ 25 июня 2019

Mongo позволяет узнать, будет ли запрос использовать индекс.Поскольку операция поиска возвращает курсор, вы можете расширить цепочку методов, включив в нее команду объяснение () , которая делает именно то, что вам нужно.(предложить использовать db.product.find(...).sort(...).explain('executionStats'))

Будет ли он использовать индекс для сортировки или будет сортироваться во время запроса?

Индекс, созданный для product_rank, будетиспользоваться в запросе, но не индекс только на sku_id.Вместо этого создайте составной индекс с product_rank и sku_id (asc и desc).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...