固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建、读取、删除等操作。这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不需要提供任何显式的指令。
如果文档更新后增加了文档的尺寸,那么固定集合会限制对文档的更新。因为固定集合按照磁盘存储的顺序来保存文档,所以能确保文档尺寸不会增加磁盘分配的尺寸。固定集合最适合保存日志信息,缓存数据以及任何其他大容量数据。
创建固定集合
要想创建固定集合,需要使用 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 集合转化为固定集合。
查询固定集合
默认情况下,利用 find 查询固定集合,结果会按照插入顺序进行显示。但如果想按相反顺序获取文档,可以使用 sort 命令,如下所示:
>db.cappedLogCollection.find().sort({$natural:-1})
关于固定集合,有以下几个非常值得注意的要点: