【发布时间】:2020-08-05 16:00:58
【问题描述】:
目前正在使用 nodejs 开发与 MongoDB 数据库通信的 API,我注意到删除文档后的特殊行为。
确实,我的 API 有几个端点,允许检索数据库中的所有动物,使用相应的 id 检索特定的动物或删除特定的动物,再次使用要删除的文档的 id。
删除文档后会出现我不理解的结果。确实,如下图所示,当我删除名为“Johnny”的动物的文档时,通过其 ID 查找它或通过相同 ID 删除它的查询继续工作,即使 get 没有返回任何内容并且删除表示没有执行任何操作。
就我个人而言,我期望的行为与我为删除传递了错误的 id 相同(如下所示),但如果 id 已在数据库中分配,则即使在删除后查询也能正常工作。
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 }));
};
【问题讨论】:
标签: javascript node.js mongodb api mongoose