Каков оптимальный способ запроса массива с большим количеством идентификаторов объектов? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть массив идентификаторов объектов MongoDB, которые я хочу отправить на мой nodejs сервер для получения данных объектов. Проблема в том, что этот массив содержит сотни идентификаторов, и я не уверен, как мне получить и запросить его, так как объединение его со строкой запроса не подойдет, так как максимальный URL может содержать до 2048 символов.

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете сделать следующее:

Если записи в БД упорядочены по _id

  • Отправить массив идентификаторов в POST запрашивайте или отправляйте минимальный и максимальный идентификаторы только в параметре запроса в запросе GET.

  • Вместо этого запрашивайте отдельный идентификатор (objectId) или выполняйте {$in : [ObjectId( )... ObjectId.....]}, как указано в точка ниже.

  • Используя min и max id из массива, запросите DB следующим образом:

    User.find({"_id":{$lte: idmax,$gte:idmin}})

Если записи не упорядочены по _id:

 User.find({"_id":{$in:[_id1,id_2.....]})  

PS: узнайте больше о запросах диапазона .

Связь между порядок значений ObjectId и времени генерации не является строгим в течение одной секунды. Если несколько систем или несколько процессов или потоков в одной системе генерируют значения в течение одной секунды; Значения ObjectId не представляют строгий порядок вставки. Отклонение часов между клиентами также может привести к нестрогому упорядочению даже для значений, поскольку драйверы клиента генерируют значения ObjectId, а не процесс mongod. Так что, если это так, вам придется запросить, используя оператор {$in : [ObjectId( ). ObjectId.....]}

Короче говоря: Если идентификаторы не в порядке в БД, вам придется использовать оператор in, потому что в противном случае запрос диапазона извлечет дополнительную запись.

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