mongoDB中上限集合的索引

时间:2013-10-01 12:59:08

标签: mongodb

我想知道上限集合是否保留过期文档的索引?

从正常集合keeps indexes中删除文档。

加盖收藏品remove documents by timerdo not allow db.collection.remove()

我在docs中找不到任何关于上限集合索引的内容,并感谢知道者的帮助。

1 个答案:

答案 0 :(得分:4)

TL; DR:从封顶集合中删除文档的唯一方法是删除整个集合,这也将从集合中删除索引本身。

  

我想知道上限集合是否保留过期文档的索引?

没有。不再存储的文档永远不会保留在索引中。

  

从正常集合中删除文档会保留索引。

这有点误导。使用db.collection.remove()从正常集合中删除所有文档会从集合中删除这两个文档,并从索引中删除这些文档。但是,它不会删除集合的索引,即,一旦添加新文档,它们就会再次添加到相应的索引中(即删除索引本身与从索引中删除文档不同)。

  

上限集合按计时器删除文档,根本不允许db.collection.remove()

您链接的TTL功能与上限集合无关,事实上,文档说:

  

您无法在上限集合上创建TTL索引,因为MongoDB无法从上限集合中删除文档。

具有TTL索引的集合允许db.collection.remove。

另一方面,capped collection具有固定的大小(就数据大小而言),并且一旦集合已满,集合中最旧的文档将被自动覆盖。这不是基于时间,而是纯粹基于集合的大小。加盖的集合始终按插入顺序(自然顺序)保存。

由于从封顶集合中删除文档的唯一方法是删除整个集合,这也将从集合中删除索引本身。