目录
什么是固定集合
固定集合(Capped Collections)是 MongoDB 中一种具有固定大小的集合类型。当集合达到设定的大小或文档数量上限时,旧的数据会被自动覆盖,适合存储日志、缓存等时间序列数据。
固定集合的特性
- 有序插入:文档按照插入顺序存储。
- 自动覆盖:当集合满时,新的文档会自动覆盖旧文档(基于插入顺序)。
- 不能删除:除非删除整个集合,否则无法删除其中的单个文档。
- 高性能写入:由于无需动态分配空间,写入速度快。
创建固定集合
使用 db.createCollection()
创建固定集合:
db.createCollection("log_data", {
capped: true,
size: 10485760, // 10MB
max: 1000 // 可选参数,限制最大文档数量
});
参数说明:
capped: true
:表示创建固定集合size
:集合的最大字节大小(必须)max
:可选,限制文档最大数量(超过后按顺序覆盖)
固定集合的使用场景
- 日志系统(如 Web 访问日志)
- 实时缓存(如最近100条用户操作)
- IoT 数据采集(如温度/湿度等时间序列数据)
这些场景通常不关心“旧数据”,只关心最新记录,因此适合使用固定集合来自动回收。
读取与写入限制
- 不能使用
_id
进行删除 - 默认只支持插入(
insert
),不支持update
改变文档大小 find()
支持以插入顺序获取文档(比如tailable cursor
)
示例操作
插入数据
db.log_data.insertOne({ message: "系统启动", timestamp: new Date() });
查询最近日志
db.log_data.find().sort({ $natural: -1 }).limit(5);
使用 tailable cursor(Node.js 示例)
const cursor = db.collection('log_data')
.find({}, { tailable: true, awaitData: true, noCursorTimeout: true });
while (await cursor.hasNext()) {
const doc = await cursor.next();
console.log(doc);
}
参考资料
- MongoDB 官方文档 – Capped Collections:
https://www.mongodb.com/docs/manual/core/capped-collections/ - MongoDB 游标(含 Tailable Cursor):
https://www.mongodb.com/docs/manual/core/tailable-cursors/
更多 MongoDB 技术内容,请访问:www.52kanjuqing.com(仅出现一次)。
发表回复