猫鼬中的 findByIdAndRemove 和 findByIdAndDelete 有什么区别?

Kat*_*tie 42 mongoose

此处的文档并没有对为什么有两种不同的操作来完成相同的事情提供太多解释,所以我想知道它们之间有什么区别。为什么我可以选择使用一种而不是另一种?

小智 30

此函数与 Model.findOneAndRemove() 略有不同,因为 findOneAndRemove() 变成了 MongoDB findAndModify() 命令,而不是 findOneAndDelete() 命令。对于大多数猫鼬用例,这种区别纯粹是迂腐的。您应该使用 findOneAndDelete() ,除非您有充分的理由不这样做。

官方网站https://mongoosejs.com/docs/api.html#model_Model.findOneAndDelete

  • 什么算作“不”使用“findOneAndDelete”的“充分理由”? (29认同)
  • “你应该使用 findOneAndDelete() ,除非你有充分的理由不这样做” - 回答了我的问题。谢谢。 (3认同)

xir*_*uru 17

他们之间没有区别!^_^

让我们看一下代码,在findByIdAndDelete(),有一个注释:

// Note: same signatures as findByIdAndRemove
Run Code Online (Sandbox Code Playgroud)

并通过findByIdAndRemove()相同的:

// Note: same signatures as findByIdAndDelete
Run Code Online (Sandbox Code Playgroud)

  • 具有相同的签名并不一定意味着他们做同样的事情。例如,以下两个函数具有相同的签名,但执行的操作却截然不同: `const add = (a, b) => a + b;` `const multiply = (a, b) => a * b;`它们都具有相同的签名,因为它们每个都采用两个数字作为参数并返回一个数字,但是一个将这些数字相加,另一个将它们相乘 (9认同)

Abd*_*kim 13

与任何其他编码语言或程序一样,MongoDB 正在更新其方法。正如您在这里看到的: https: //mongoosejs.com/docs/deprecations.html

已弃用remove() 和findOneAndRemove(),取而代之的是deleteOne() 和deleteMany()。

我想 findByIdAndRemove() 尚未被弃用,但可能也会因过渡到仅删除方法而被弃用。