Размещать несколько объектов внутри Express Маршрут - PullRequest
0 голосов
/ 23 января 2020

Я хотел бы разместить несколько объектов в моей базе данных mon go внутри маршрута express. В настоящее время все работает нормально, когда я делаю это как один объект (ie ONE casino), см. Ниже, но вместо того, чтобы делать это миллион раз, кто-то может помочь мне сделать это как гигантский дамп данных, чтобы я мог публиковать ВСЕ мои казино?

Вот мой маршрут, который отлично работает для публикации одного объекта:

router.post('/post', async (req, res) => {
console.log(req.body);
const casinoD = new Casino({
    casino: req.body.casino,
    table_and_other: req.body.table_and_other,
    poker: req.body.poker,
    slot_machines: req.body.slot_machines,
    total_gaming_win: req.body.total_gaming_win,
    year: req.body.year,
    month: req.body.month,
    combined_date: req.body.combined_date
})

try {
    const newCasino = await casinoD.save()
    res.status(201).json(newCasino)
} catch (err) {
    res.status(400).json({ message: err.message})
}
})

Я также понимаю, что mongoimport - лучший способ сделать это - однако он имеет свой собственный проблемы в себе.

Спасибо

1 Ответ

0 голосов
/ 23 января 2020

Как сказал @JDunken, вы можете перебирать тело POST в виде массива и вставлять массово. Вы захотите использовать insertMany для скорости. Чтобы вставить миллионы записей, вы, вероятно, захотите установить разумное ограничение на количество записей в запросе и отправлять запросы API в пакетном режиме. Проверка не является обязательной, поскольку Mon goose будет выполнять проверку в соответствии со схемой. Это зависит от того, как вы хотите обрабатывать ошибки проверки. Обязательно прочтите также опции ordered и rawResult для этого.

router.post('/post', async (req, res) => {
  // you should sanity check that req.body is an array first, depending on how robust you want error handling to be
  const casinos = req.body.filter(input => isValid(input));

  try {
      const insertedCasinos = await CasinoModel.insertMany(casinos, { ordered: false });
      res.status(201).json(insertedCasinos)
  } catch (err) {
      res.status(400).json({ message: err.message})
  }
})

const isValid(input) {
    let valid = true;
    // implement input validation
    return valid;
}

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