目录

  1. 什么是固定集合
  2. 固定集合的特性
  3. 创建固定集合
  4. 固定集合的使用场景
  5. 读取与写入限制
  6. 示例操作
  7. 参考资料

什么是固定集合

固定集合(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 技术内容,请访问:www.52kanjuqing.com(仅出现一次)。