我无法区分findOneAndDelete()中的findOneAndRemove()和mongoose documentaion。
Query.prototype.findOneAndDelete()
此函数与Model.findOneAndRemove()略有不同 findOneAndRemove()成为MongoDB findAndModify()命令 与findOneAndDelete()命令相反。对于大多数猫鼬用例, 这种区别纯粹是迂腐的。 你应该使用 findOneAndDelete()除非你有充分理由不这样做。
答案 0 :(得分:1)
在MongoDB本机客户端(猫鼬不同)中,将{ remove: true }
传递给findAndModify
使其删除找到的文档,这种情况下的行为与findOneAndDelete
非常相似。
但是,使用其他选项时会有一些区别:
query
,sort
,doc
(更新对象),options
和callback
。 findOneAndDelete只需要3(filter
或查询,options
和一个callback
)options
的 findAndModify
包括w
,wtimeout
和j
用于写问题,例如:
“ MongoDB请求对独立mongod或副本集或分片集群进行写操作的确认级别。”或仅保证可用于报告写操作成功的级别。
options
的 findOneAndDelete
不包括写关注配置。
findAndModify
可让您返回新文档并同时将其删除。
示例:
// Simple findAndModify command returning the new document and
// removing it at the same time
collection.findAndModify({b:1}, [['b', 1]], {$set:{deleted: Date()}}, {remove:true}, calback)
答案 1 :(得分:1)
这里的其他答案有很多错误信息。它们在所有意图和目的上都是相同的,您应该只使用findOneAndDelete()
。
猫鼬的Model.findOneAndRemove(query)
成为MongoDB的findAndModify({query, remove: true})
。
猫鼬的Model.findOneAndDelete()
成为MongoDB的findOneAndDelete()
。但是,MongoDB驱动程序将findOneAndDelete(query, opts)
转换为findAndModify({query, remove: true})
(src)。因此,它们在数据库中执行完全相同的操作。
两者的选择相同。
两者都返回已删除的文档。
答案 2 :(得分:0)
在猫鼬中,findOneAndDelete的工作方式与findOneAndRemove相同。它们都通过JSON中的属性查找对象,然后继续删除它,并在删除后返回对象。当您将本机mongodb用作数据库时,findOneAndDelete可能对您有用,但在猫鼬不推荐使用的情况下,我建议您使用findOneAndDelete来基于此时的最新mongoose和nodejs配置执行操作。 https://github.com/Automattic/mongoose/issues/6880
答案 3 :(得分:0)
我建议您使用findOneAndDelete()。 Mongoose既提供了使用ORM处理数据的功能,又提供了直接写入数据库的功能,其中findOneAndDelete()是后者之一。直接写入数据库更加危险,因为您可能会面临不调用中间件或验证程序的风险,从而有可能向数据库提交部分或不完整的数据。请注意,我说这是 more 危险,而不是完全危险,findOneAndDelete()贯穿整个ORM,增加了安全性。
答案 4 :(得分:0)
findOneAndRemove返回已删除的文档,因此,如果删除了以后决定不删除的文档,则可以将其重新插入数据库。在删除文档之前,请确保逻辑合理,而不是在事后检查IMO。
findOneAndDelete具有sort参数,可用于影响哪个文档被更新。它还具有一个TimeLimit参数,该参数可以控制必须完成的操作
答案 5 :(得分:0)
除了 findOneAndRemove 使用带有删除标志的 findAndModify 之外,这两者几乎相似,与 findOneAndDelete 相比,时间复杂度要高一些,因为正在更新。删除总是更快。
答案 6 :(得分:0)
它们都做相同的事情(从mongodb数据库中删除文档),但是它们之间几乎没有区别,并且共同的有用区别是findOneAndRemove()
返回删除的文档(如果您有兴趣在之后使用它)它已删除。
答案 7 :(得分:0)
TLDR:除非有充分理由不这样做,否则应使用findOneAndDelete()。
更长的答案:
来自findOneAndDelete的Mongoose文档:
此函数与Model.findOneAndRemove()稍有不同,因为findOneAndRemove()成为MongoDB findAndModify()命令,而不是findOneAndDelete()命令。对于大多数猫鼬用例,这种区别纯粹是腐的。除非有充分的理由,否则应使用findOneAndDelete()。