Mongo DB MaxScan — Нераспознанное поле

#mongodb #indexing

#mongodb #индексирование

Вопрос:

Я использую Mongo версии 4.2и пытаюсь ограничить количество документов, сканируемых с помощью MaxScan. Я пробовал «ограничить», но я считаю, что это извлекает все соответствующие документы, а затем разрезает массив, я на самом деле хочу запретить mongo сканировать последние 5 документов. Вот ошибка, которую я получаю:

 db.movies.find({title: 'Godfather'}).maxScan(5)
Error: error: {
    "operationTime" : Timestamp(1598049657, 1),
    "ok" : 0,
    "errmsg" : "Failed to parse: { find: "content_movies", filter: { title: "Godfather" }, maxScan: 5.0, lsid: { id: UUID("de0fad49-6cd1-425f-896a-77aa7229e4f0") }, $clusterTime: { clusterTime: Timestamp(1598049547, 1), signature: { hash: BinData(0, 98F9B39F0F6B9E8088947EF37506EA8B17F8AFAA), keyId: 6838904097895088131 } }, $db: "PRODUCTION" }. Unrecognized field 'maxScan'.",
    "code" : 9,
    "codeName" : "FailedToParse",
    "$clusterTime" : {
            "clusterTime" : Timestamp(1598049657, 1),
            "signature" : {
                    "hash" : BinData(0,"/oI 65SAR7fEGyp9yilR PFG3KQ="),
                    "keyId" : NumberLong("6838904097895088131")
            }
    }
}
  

Ценю вашу помощь.

Комментарии:

1. Mongo удалил опцию MaxScan в 4.2. Эта ссылка — bookstack.cn/read/mongodb-4.2-manual /… — предлагает вместо этого использовать опцию maxTimeMS. Однако этот параметр не подходит для вашего варианта использования.

2. Я серьезно сомневаюсь, что Mongo извлек бы все документы перед нарезкой, за исключением необходимости делать это, потому что другая операция в запросе, такая как сортировка. Представьте чрезвычайно большую коллекцию и запрос, который соответствует большинству документов. Было бы глупо и пагубно для Mongo извлекать и кэшировать все совпадения, когда пользователю нужны только первые пять.

Ответ №1:

MaxScan удален в версии 4.2.

MongoDB удаляет устаревшую опцию MaxScan для команды find и вспомогательный курсор оболочки mongo.MaxScan(). Используйте либо опцию maxTimeMS для команды find, либо вспомогательный курсор.maxTimeMS() вместо этого.

Я действительно хочу остановить mongo от сканирования первых 5 документов

Используйте для этого limit.