这里的文档并没有为什么有两个不同的操作来完成同一件事提供太多解释,所以我想知道它们之间的区别是什么。为什么我会选择使用其中一个而不是另一个?
这个函数与Model.findOneAndRemove()稍有不同,因为findOneAndRemove()变成了一个MongoDB的findAndModify()命令,而不是一个findOneAndDelete()命令。对于大多数mongoose使用情况来说,这种区别仅仅是纯粹的学究派。除非你有充分的理由不用,否则应该使用findOneAndDelete()。
官方网站https://mongoosejs.com/docs/api.html#model_Model.findOneAndDelete
它们之间没有区别!^_^
让我们来看看代码,在findByIdAndDelete()
中,有一个注释:
// Note: same signatures as findByIdAndRemove
通过findByIdAndRemove()
同样可以实现:
// Note: same signatures as findByIdAndDelete
const add = (a, b) => a + b;
const multiply = (a, b) => a * b;
它们具有相同的签名,因为它们都接受两个数字作为参数并返回一个数字,但一个是将这些数字相加,而另一个是将它们相乘。 - Katie// 注意:与findByIdAndRemove具有相同的签名
。如果你发布了代码块或者只是提到这些代码完全相同,就不会有任何争议了。 - Amir AsyrafMongoDB正在更新其方法,就像任何其他编程语言或程序一样。您可以在此处查看:https://mongoosejs.com/docs/deprecations.html
remove()和findOneAndRemove()已被废弃,取而代之的是deleteOne()和deleteMany()。
我猜findByIdAndRemove()目前还没有被废弃,但很可能也会被废弃以过渡到仅删除方法。
我明白了原因:findByIdAndRemove返回已删除的文档,而findByIdAndDelete则不返回。 如果我们需要已删除的文档,则可以使用findByIdAndRemove;否则,可以使用findByIdAndDelete。
建议: 如果不需要获取已删除的文档,则必须使用findByIdAndDelete,因为它快速且不返回文档。
两者的备注没有任何区别。
如果有,这两个函数都会返回找到的文档。
// Finds a matching document, removes it, passing the found document (if any) to the callback.
通过文档的 _id 字段发出 MongoDB findOneAndDelete() 命令。换句话说,findByIdAndDelete(id) 是 findOneAndDelete({ _id: id }) 的简写。
通过文档的 _id 字段发出 mongodb findAndModify remove 命令。findByIdAndRemove(id, ...) 等同于 findOneAndRemove({ _id: id }, ...)。
findOneAndDelete
不是一个“好的理由”? - Katie