2013-10-21 55 views
0
  • 不MongoDB的一致性處理爲來自TTL收集鏈接的文檔?

e.g:如果「用戶」模式指的是和鏈接的用戶之一是爲太舊去掉一個TTL集合,將它的各種不同羣體的鏈接被刪除?MongoDB的TTL一致性

var GroupSchema = new Schema({ 
    users   : [{ 
     type  : Schema.Types.ObjectId, ref: 'User' 
    }] 
}); 

mongoose.model('Group', GroupSchema); 
  • 如果沒有,什麼是用於處理是由於移除TTL鏈接文檔的列表中的最佳做法?

在CouchDB中,您可以監聽由I/O操作觸發的事件我認爲,MongoDB中是否存在或正在實施類似的機制?

如果它的事項,我使用Node.js的貓鼬ODM。

預先感謝您!

+0

MongoDB沒有連接服務器端,因此沒有,它不。至於最佳做法,如果原始文檔被移除,什麼都不能阻止您嵌套文檔,如果它沒有用處? – Sammaye

+0

連接與我的問題有什麼關係?該問題與刪除TTL收集文件的鏈接下落有關。 –

+0

加入將需要確保你的鏈接文檔 – Sammaye

回答

1

MongoDB不強制執行參照完整性。

的MongoDB沒有觸發器。

當一個文件被刪除,它是應用程序的責任,以確保任何引用的文件也被刪除,並指着它有任何引用刪除或更新。當文檔TTL的末尾是一個事件,它不僅需要刪除該文檔,而且數據庫上的TTL功能對於該作業而言不足,並且您需要在應用程序級別上創建不同的解決方案。

順便說一句:當一個對象擁有許多兒童其是沒有它(組合物,而不是aggreagation的情況)毫無意義的,它通常是有意義MongoDB中嵌入父文檔中的兒童而不是讓它們的作爲單獨的文件。這樣他們與父母一起被刪除。

此外,你應該總是問自己是否真的需要真正刪除數據,如果它不會是更明智的做法是隻將其標記通過它設置一個標誌爲已刪除。如果發生用戶錯誤,刪除刪除標記很容易,但是恢復數據庫的硬刪除不是。

+0

的引用完整性但是嵌入不會在TTL集的情況下,解決方案,因爲你會失去這TTL功能,並刪除整個組之間進行選擇,對不對? –

+0

@m_vdbeek當一個組不擁有它的成員,並且將它們與組一起刪除是沒有意義的,那麼你就不應該嵌入它們。 – Philipp