Удалите документ MongoDB в Express JS

#node.js #mongodb #express

Вопрос:

Я поражен тем, как сильно я пытаюсь удалить документ в MongoDB из Express JS. Я нахожу сочетание документации и методов, включая deleteOne, findByIdAndRemove, в некоторых учебниках говорится, что вам нужно объявить идентификатор объекта, а в некоторых нет. Безумие.

В любом случае, ниже приведен мой код. У меня есть функция для подключения к базе данных:

 const withDB = async (operations, res) =gt; {  try {  const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true });  const db = client.db('database-name');  await operations(db);  client.close();  } catch (error) {  res.status(500).json({ message: 'Error connecting to db', error });  } }  

А затем ниже приведена моя команда удаления:

 app.delete('/api/reports/delete-report/:id', async (req, res) =gt; {   //call withDB function above  withDB(async (db) =gt; {    //delete command   const result = await db.collection('reports').deleteOne( { _id : new MongoClient.ObjectId(req.params.id) } );    //get reports  const reportInfo = await db.collection('reports').find().toArray()    //put returned reports into the result provided  res.status(200).json(reportInfo);   }, res); });  

Из-за моих проблем я получаю сообщение «Ошибка подключения к бд». Если я выполню команду удалить:

 const result = await db.collection('reports').deleteOne( { _id : req.params.id } );  

Я просто возвращаю содержимое базы данных, но там нет удаления.

Ответ №1:

Проблема в том, что:

 new MongoClient.ObjectId(req.params.id)  

Вы не хотите создавать еще одного монгоклиента. Это должно быть

 new ObjectId(req.params.id)  

и убедитесь, что вы импортируете этот класс:

 const { MongoClient, ObjectId } = require('mongodb');  

Комментарии:

1. Потрясающе, большое вам спасибо!