Mongodb: я должен использовать `foreach` или` $ lookup`, чтобы выполнить обновление для `collection1`, используя данные из` collection2` для повышения производительности? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть две коллекции, collection1 и collection2, и мне нужно обновить все записи в collection1, украсив их соответствующими данными из collection2. Чтобы «присоединиться» к этим коллекциям, у меня есть запись userid в обеих коллекциях, которую я могу использовать для идентификации соответствующих записей.

Для лучшей производительности, я должен использовать foreach или $lookup?

1 Ответ

1 голос
/ 31 марта 2020

Поэтому, когда вы используете .find() и затем записываете обратно в базу данных, вы читаете набор данных из базы данных и перебираете все эти документы, используя foreach, а затем снова записываете в базу данных, если вы Огромный набор данных для работы с этим, безусловно, трудоемкий процесс и ненужное воздействие как на серверы приложений, так и на серверы баз данных, что также может занимать много времени, так как данные должны проходить через серверы и не является предпочтительным для этого. На всякий случай, если вам нужен этот маршрут, проверьте .bulkWrite () - по крайней мере, это поможет вам писать документы за один вызов БД, но есть ограничение, оно может обрабатывать только 100K документов в go, если вы отправите больше, то он будет внутренне обрабатывать фрагменты и обрабатывать данные - но я на самом деле не проверял это с миллионами документов.

Поскольку у вас версия 4.2.3 , Запуск MongoDB v 4.2 Агрегация имеет новую функцию $ merge , которая может помочь объединить результаты запроса агрегации в другую коллекцию. Чтобы быть в безопасности, сначала попробуйте записать данные в новую коллекцию и, если все выглядит так Хорошо, напишите это на collection1 - в любой момент есть резервная копия на collection1. Это может сэкономить вам время, а также вся обработка происходит на стороне сервера (на стороне базы данных). Помимо этого, оба подхода имеют механизм чтения и записи, поэтому тестируйте ваши запросы, используя индексы, используя объяснение . Также рассмотрим агрегационные ограничения .

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