当使用Mongoid引用reletions什么是依赖detroy和依赖删除差异性之探源因为在文档,它告诉:Mongoid依赖:摧毁VS:删除
:delete: Delete the child documents.
:destroy: Destroy the child documents.
当使用Mongoid引用reletions什么是依赖detroy和依赖删除差异性之探源因为在文档,它告诉:Mongoid依赖:摧毁VS:删除
:delete: Delete the child documents.
:destroy: Destroy the child documents.
在Mongoid(也ActiveRecord的,我相信),delete
刚从数据库中删除对象。 destroy
将删除该对象并运行该模型定义的所有适当的回调。因此,如果您在模型上有before_destroy
回调,而您的delete
模型为实例,则不会调用before_destroy
回调。
因此dependent: :destroy
删除时运行模型的回调,dependent: :delete
不运行。
destroy
运行模型回调,然后对数据库执行REMOVE查询。delete
只是对数据库执行REMOVE查询。这些名字取自ActiveRecord
,这就是为什么他们不符合mongo很好。
你可以看到delete
作为destroy
的优化。当您使用destroy
时,请确保执行before_destroy
回调,以便完成适当的清理。另一方面,如果您执行类似Model.destroy_all
的操作,则必须加载所有元素,然后为其中的每个元素执行REMOVE查询,无论Model.delete_all
是否仅生成一个查询。
所以如果我没有任何回调他们是同样的事情? – 2012-03-31 14:49:28
是的,我可能会考虑使用'destroy'。如果你添加了一个回调函数,除非你不希望回调函数实际运行,否则你需要记住将它从'delete'改为'destroy'。 – 2012-03-31 14:59:06
即使你没有回调,它们也不是一回事。由于'destroy'依赖于回调,因此必须加载相关文档以执行回调,并执行DELETE查询。 'delete'只是一个DELETE查询。 然后,销毁是“更安全”,但删除是“更快” – tothemario 2014-04-15 18:17:03