Обновление большого количества документов в mongodb - PullRequest
1 голос
/ 28 мая 2020

Я работаю над решением этой проблемы:

У меня есть большая коллекция записей, которые мне регулярно приходится обновлять из другой базы данных. Я использую express. js с mongodb. График обновления начинается каждый день в 01:00. Я извлекаю внешние данные, сравниваю их с существующими в настоящее время и обновляю все записи в нашей базе данных.

Процесс выглядит так: 1) Получение внутренних и внешних данных 2) Объединение их вместе (прошлые записи из нашей базы данных, будущие записи из другая база данных) 3) Удалить все записи в нашей базе данных 4) InsertMany - записи, которые программа только что объединила.

Итак, как видите, это довольно рискованная задача. Если между удалением и вставкой данных в коллекцию произойдет какая-либо ошибка, мы потеряем все данные.

И вот мои вопросы:

1) Есть ли эффективный способ вернуть данные, которые были только что удалил в пн go? Или оставьте их в ожидании и вставьте обратно на место, если возникнет какая-либо ошибка?

2) Есть ли другой эффективный способ обновления нескольких сотен / тысяч документов, кроме deleteMany -> insertMany // updateOne на каждом документ?

Будем признательны за любые советы.

1 Ответ

1 голос
/ 28 мая 2020

Альтернативой вашему набору операций может быть:

  1. выборка внешних данных
  2. добавление внешних данных в новую базу данных / коллекцию
  3. объединение данных вместе с запросом на увеличение с использованием $ merge (https://docs.mongodb.com/manual/reference/operator/aggregation/merge/)

Таким образом вам не придется удалять все данные, что может привести к потере данных.

...