2013-10-01 41 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