ошибка неизменяемого _id при выполнении MongoDB bulkWrite replaceOne только с первой попытки - PullRequest
1 голос
/ 02 августа 2020

Я работаю над небольшим веб-приложением, которое будет сканировать и обновлять бейсбольную турнирную таблицу за день и отслеживать позиции команд (среди прочего) с течением времени.

У меня есть API, из которого я все это беру, и коллекция в MongoDB, в которой хранятся все данные и информация команды за текущий день. Прямо сейчас я просто запускаю это вручную, но со временем он будет автоматически запускаться, например, в 3 часа ночи или когда угодно.

API предоставляет уникальный идентификатор для каждой команды, который никогда не меняется. Итак, я беру данные команды из API. Передача его в функцию, которая затем извлекает данные команд (есть другие данные из объекта ответа, которые мне не нужны), помещает их в объект для замены, а затем, где бы этот идентификатор команды существует в коллекции, его документ заменяется в a bulkWite.

async function currentStandings(db,team_standings,callback){
  const current_standings = db.collection('current_standings');

  let replacePool = [];

  for(const single_team of team_standings.data.standing){
    let replaceOnePusher = {
      replaceOne: {
        "filter": {"team_id": single_team.team_id},
        "replacement": single_team
      }
    }

    replacePool.push(replaceOnePusher);
  }

  await current_standings.bulkWrite(replacePool);

  callback();
}

Однако, когда я выполняю этот код в первый раз каждый день, я получаю сообщение об ошибке BulkWriteError: After applying the update, the (immutable) field '_id' was found to have been altered to _id: ObjectId('5f26e57b6831761ac840bf1d') (не один и тот же идентификатор каждый день), и если я смотрю в Компас, данные не ' t обновлено. Если я немедленно запустил сценарий снова, он пройдет успешно без ошибок. Обновление данных в компасе генерирует правильные данные.

Может кто-нибудь объяснить мне, что здесь происходит не так? На самом деле это мой первый раз, когда я использую MongoDB, так как я хотел изучить его, и этот проект показался мне хорошим местом для начала.

...