mongoDB中封顶集合的索引

mongoDB中封顶集合的索引,mongodb,Mongodb,我想知道封顶集合是否保留过期文档的索引 正在从正常收集中删除文档 封顶集合和所有 我找不到任何关于封顶集合索引的文字,我将感谢任何知道封顶集合索引的人的帮助。TL;DR:从封顶集合中删除文档的唯一方法是删除整个集合,这也将从集合中删除索引本身 我想知道封顶集合是否保留过期文档的索引 不会。不再存储的文档永远不会保留在索引中 从正常集合中删除文档将保留索引 这有点误导。使用db.collection.remove()从正常集合中删除所有文档将从集合中删除这两个文档,并从索引中删除这些文档。但是,它

我想知道封顶集合是否保留过期文档的索引

正在从正常收集中删除文档

封顶集合和所有


我找不到任何关于封顶集合索引的文字,我将感谢任何知道封顶集合索引的人的帮助。

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

我想知道封顶集合是否保留过期文档的索引

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

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

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

Capped collection通过计时器删除文档,并且根本不允许
db.collection.remove()

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

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

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

另一方面,A的大小是固定的(就数据大小而言),一旦集合已满,则会自动覆盖集合中最旧的文档。这不是基于时间,而是纯粹基于集合的大小。封顶集合始终保持插入顺序(自然顺序)


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

非常感谢您澄清封顶集合和TTL ed集合之间的区别。那么TTL过期文档的索引会发生什么情况呢?集合上的索引仍然存在。可以说,集合是它自己的一个实体。不管它当前是否为空——毕竟,TTL功能本身就是一个索引。