當使用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