Mongodb: оператор $ in против множества одиночных запросов - PullRequest
39 голосов
/ 22 ноября 2011

Я знаю, что MongoDB может обрабатывать много запросов в секунду, но, скажем, мне нужно запросить много документов из коллекции, учитывая их _id;что звучит лучше: сделать $ in для атрибута _id со всеми идентификаторами, которые я хочу получить, или выполнить цикл по запросам findOne?

1 Ответ

45 голосов
/ 22 ноября 2011

Я бы определенно согласился использовать запрос $ in и предоставить массив _ids.

Пример:

db.collection.find({
    "key": {
        "$in": [
            ObjectId("xxx"),
            ObjectId("yyy"),
            ObjectId("zzz")
        ]
    }
})

Почему?

  • Если выВ цикле существует определенное количество настроек и разрывов для каждого запроса, создающего и исчерпывающего курсоры, которые могут привести к накладным расходам.
  • Если вы не делаете это на локальной машине, это также создает издержки tcp / ip для каждого запроса.Локально вы можете использовать доменные сокеты.
  • Существует индекс "_id", созданный по умолчанию, и сбор группы документов для возврата в пакетном запросе должен быть очень быстрым, поэтому нет необходимости разбивать его наменьшие запросы.

Здесь есть дополнительная документация здесь , если вы хотите проверить это.

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