2013-10-01 40 views

回答

3

TL; DR:從加蓋集合中刪除文檔的唯一方法是刪除整個集合,這也會從集合中刪除索引本身。

我不知道是否封頂的集合保留過期文檔的索引?

否。不再存儲的文檔不會保留在索引中。

從正常集合中刪除文檔可以保留索引。

這有點讓人誤解。使用db.collection.remove()從正常集合中刪除全部文檔將刪除集合中的兩個文檔,並從索引中刪除這些文檔。但是,它不會刪除集合的索引,即一旦添加了新文檔,它們將再次添加到相應的索引中(即刪除索引本身與從索引中刪除文檔不同)。

加蓋集合按定時器刪除文檔,根本不允許db.collection.remove()

您所連結的TTL-功能無關與上限的集合,事實上,文件說:

你不能在一個封頂集合創建TTL索引,因爲MongoDB的無法刪除文件來自封頂收藏。

具有TTL索引的集合確實允許db.collection.remove。

另一方面,A capped collection具有固定的大小(根據數據大小),並且一旦收集完成後,集合中最早的文檔將被自動覆蓋。這不是建立在時間上的,而僅僅是集合的大小。加蓋的收藏集始終以插入順序(自然順序)保存。

由於從封頂集合中刪除文檔的唯一方法是刪除整個集合,這也將從集合中刪除索引本身。

+0

非常感謝澄清封頂和TTL收藏之間的區別。那麼TTL過期的文檔索引會發生什麼? –

+0

集合上的索引仍然存在。收藏品本身就是一個實體,可以這麼說。不管它現在是否爲空 - 畢竟,TTL功能本身就是一個索引。 – mnemosyn