#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. Потрясающе, большое вам спасибо!