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