Массовое обновление документов MongoDB с помощью mongoose - PullRequest
0 голосов
/ 08 октября 2018

Как лучше всего обновить одно поле для всех документов в базе данных mongodb?

Допустим, это мой массив объектов

const data = [
  {
    _id: '21381ubdjhbajhda',
    name: 'Samuel'
  },
  {
    _id: '21381ubdj2222bajhda',
    name: 'Jack'
  },
  {
    _id: '21384441ubdjhbajhda',
    name: 'David'
  },
  and 45000 items more
]

, поэтому самый простой способbe

async function updateAll () {
  const data = [
    {
      _id: '21381ubdjhbajhda',
      name: 'Samuel'
    },
    {
      _id: '21381ubdj2222bajhda',
      name: 'Jack'
    },
    {
      _id: '21384441ubdjhbajhda',
      name: 'David'
    },
    and 45000 items more
  ]
  await Promise.all(data.map(async (element) => {
    const {_id, name} = element;
    findByIdAndUpdate(_id, { $set: { name: name } }, function(err,data) {
      if (err) return handleError(err);
    });
  }));
}

И другой метод будет использовать массовую операцию, которая будет выглядеть так, как показано ниже , но она не работает :

function updateAll () {

  var bulk = db.persons.initializeOrderedBulkOp();
  data.map((element) => {
    const {_id, name} = element;
    bulk.find( { _id: _id } ).update( { $set: { name: name } } );
  })

  bulk.execute();
}

Но есть ли другой лучшийспособы сделать это?Любые предложения о том, как обновить документы оптом?Пожалуйста, имейте в виду, что поле, которое я пытаюсь обновить, варьируется от документа к документу.Спасибо

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