MongoDB固定集合


固定集合是固定大小的循环集合,遵循插入顺序,以支持创建,读取和删除操作的高性能。循环表示这意味着分配给集合的固定大小用尽时,它将开始删除集合中最旧的文档,而无需提供任何显式命令。

如果更新导致文档大小增加,则固定集合将限制对文档的更新。由于加盖的集合按磁盘存储的顺序存储文档,因此可以确保文档大小不会增加在磁盘上分配的大小。封顶的集合最适合存储日志信息,缓存数据或任何其他大容量数据。

创建固定集合


要创建一个封顶的集合,我们使用常规的createCollection命令,但使用capped选项为true并指定收集的最大大小(以字节为单位)。

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

除了馆藏大小,我们还可以使用max范围:

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

如果要检查集合是否有固定,请使用以下命令isCapped命令:

>db.cappedLogCollection.isCapped()

如果你打算将现有的集合转换为固定,则可以使用以下代码进行处理:

>db.runCommand({"convertToCapped":"posts",size:10000})

此代码将转换我们现有的集合posts到有固定的集合。

查询固定集合


默认情况下,在固定集合上的查找查询将按插入顺序显示结果。但是,如果你想以相反的顺序检索文档,请使用sort命令如下代码所示:

>db.cappedLogCollection.find().sort({$natural:-1})

关于固定集合,还有其他重要的知识值得一提:

  • 我们无法从有固定集合中删除文档。

  • 固定集合中没有默认索引,即使在_id字段上也没有。

  • 插入新文档时,MongoDB不必实际在磁盘上寻找容纳新文档的位置。它可以将新文档盲目插入到集合的末尾。这使得加盖集合中的插入操作非常快。

  • 同样,在读取文档时,MongoDB将以与磁盘上相同的顺序返回文档。这使得读取操作非常快。