固定集合是具有固定大小的循环集合,遵循插入顺序,以支持高性能的创建、读取和删除操作。通过循环,当分配给集合的固定大小用完时,它将删除集合中最旧的文档,而不提供任何显式命令。
如果更新导致文档大小增加,则固定集合会限制对文档的更新。由于固定集合是按磁盘存储的顺序存储文档的,因此可以确保文档大小不会增加磁盘上分配的大小。固定集合最适合存储日志信息、缓存数据或任何其他高容量数据。
要创建一个具有固定大小的集合,我们可以使用常规的 createCollection 命令,但需要将 capped 选项设置为 true,并以字节为单位设置集合的大小。
> db.createCollection("cdsy", {capped:true, size:10000}) { "ok" : 1 }
其中 cdsy 为要创建的集合名称。除了集合的大小外,我们还可以使用 max 参数来限制集合中文档的数量:
> db.createCollection("cdsy", {capped:true, size:10000, max:1000}) { "ok" : 1 }
如果要检查集合是否为固定集合,可以使用 isCapped 命令:
> db.cdsy.isCapped() true
如果您需要将已经存在的集合转换为固定集合,可以使用如下命令:
> db.runCommand({"convertToCapped":"cdsy",size:10000}) { "ok" : 1 }
上面的命令可以将我们已存在的集合“cdsy”转换为固定集合。
固定集合中的文档是按照插入顺序储存的,默认情况下查询也是按照插入顺序返回的,当然也可以使用 sort() 方法调整返回的顺序。示例代码如下:
> db.cdsy.find().sort({$natural:-1})
关于固定集合,有以下几点需要注意: