В настоящее время разрабатывая API с nodejs, который взаимодействует с базой данных MongoDB, я заметил особое поведение после удаления документа.
Действительно, у моего API есть несколько конечных точек, которые позволяют извлекать всех животных в базы данных, чтобы получить указанный c один, используя соответствующий идентификатор, или удалить указанный c один, снова используя идентификатор документа для удаления.
Результаты, которые я не понимаю, произойдут однажды документ удален Действительно, как вы можете видеть на рисунке ниже, когда я удаляю документ животного с именем «Джонни», запросы на его поиск по его идентификатору или удаление по тому же идентификатору продолжают работать, даже если метод get ничего не возвращает и удаление указывает, что никакая операция не была выполнена.
Лично я ожидал того же поведения, как если бы я передал неверный идентификатор для удаления (видимый ниже ), но если идентификатор уже был назначен в базе данных, запросы работают даже после удаления.
Имеет ли MongoDB «кэш» из удаленные документы для выполнения отката в случае нежелательного удаления?
Ниже вы найдете различные конечные точки, которые используют find, deleteOne & findById
exports.getAllAnimal = (req, res, next) => {
Animal.find().sort({'customer' : 1})
.then(animals => res.status(200).send(animals))
.catch(error => res.status(400).send({ error: error.message }));
};
exports.getOneAnimal = (req, res, next) => {
Animal.findOne({ _id: req.params.id })
.then(animal => res.status(200).send(animal))
.catch(error => res.status(400).send({ error: error.message }));
};
exports.deleteAnimal = (req, res, next) => {
Animal.deleteOne({ _id: req.params.id })
.then(thing => res.status(200).send({ message : 'Animal successfully deleted'}))
.catch(error => res.status(400).send({ error: error.message }));
};