Подтвердить что ты не робот

Mongodb: $в операторе и множество одиночных запросов

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

4b9b3361

Ответ 1

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

Пример:

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

Почему?

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

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