MongoDB лучший подход только к данным POST, если они не существуют в БД? - PullRequest
0 голосов
/ 19 апреля 2019

Каков наилучший подход для передачи только данных POST в MongoDB, если их нет в таблице? hash будет уникальным полем для поиска, это поле также проиндексировано.

router.post('/', async (req, res) => {
  try{ 
    var id = null
    const keywords = await db.dbConn('kw_data');
    await keywords.insertOne({
      result: req.body,
      added: new Date(),
      modified: new Date(),
      hash: req.body.hash
    }).then(resp => {
      id = resp.insertedId
    })
    var data = {}
    data = await keywords.findOne({_id: id});
    res.status(201).send(data);
  }
  catch(e) {
    res.status(400).send(e);
    res.status(404).send(e);
    res.status(500).send(e); 
  }
})

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Вы можете использовать

await keywords.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
   }
);

и установите

upsert: правда

Таким образом, вы вставляете данные, и база данных сама узнает, созданы ли данные, будет ли она обновлена, а если она не существует, база данных создаст ее для вас

0 голосов
/ 19 апреля 2019

Я думаю, что получил его, просто проверив хеш, но не уверен, что это лучший подход, поправьте меня, если я ошибаюсь ...

router.post('/sug', async (req, res) => {
  try{ 
    var id = null
    const keywords = await db.dbConn('kw_sug');
    check = await keywords.findOne({hash: req.body.hash});
    if(check === null){
      await keywords.insertOne({
        results: req.body,
        added: new Date(),
        modified: new Date(),
        hash: req.body.hash
      }).then(resp => {
        id = resp.insertedId
      })
      var data = {}
      data = await keywords.findOne({_id: id});
      res.status(201).send(data);
    }else{
      res.status(201).send('duplicated');
    }
  }
  catch(e) {
    res.status(400).send(e);
    res.status(404).send(e);
    res.status(500).send(e); 
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...