convertToCapped
convertToCapped
convertToCapped
命令将同一数据库中现有的非固定固定大小集合转换为固定固定大小集合。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
{ convertToCapped: <collection>, size: <capped size>, writeConcern: <document>, comment: <any> }
命令字段
该命令接受以下字段:
字段 | 说明 |
---|---|
convertToCapped | 要转换的现有collection的名称。 |
size | 固定大小集合的最大大小(以字节为单位)。 |
writeConcern | 可选。 表达 命令 写关注(write concern) drop 的文档。省略以使用默认的写关注(write concern)。 |
comment | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 |
convertToCapped
获取现有集合( <collection>
) 并将其转换为固定大小固定大小集合,其最大大小以字节为单位,由size
参数 ( <capped size>
) 指定。
在转换过程中,convertToCapped
命令表现出以下行为:
- MongoDB会遍历原始集合中的文档
- 自然顺序,并将文档加载到新的固定固定大小集合中。
- 如果为固定大小固定大小集合指定的
capped size
是 - 小于原始非固定大小集合的大小,那么MongoDB将根据插入顺序或先进先出顺序覆盖固定大小固定大小集合中的文档。
- 如果为固定大小固定大小集合指定的
- 在内部,为了转换集合, MongoDB使用以下
步骤
cloneCollectionAsCapped
命令创建固定大小- 集合并导入数据。
MongoDB 会删除原始collection。
renameCollection
重命名新的固定大小集合- 为原始集合的名称。
此功能会在操作期间保持数据库独占锁。锁定同一数据库的其他操作将被阻止,直到该操作完成。请参阅某些常见客户端操作会采用哪些锁?锁定数据库的操作。
警告
convertToCapped
不会在新集合上重新创建原始集合中的索引,但 _id
字段上的索引除外。如果需要此集合的索引,您需要在转换完成后创建这些索引。
例子
转换collection
以下示例使用db.collection.insertOne()
events
创建collection,并使用db.collection.stats()
获取有关该collection的信息:
db.events.insertOne( { click: 'button-1', time: new Date() } ) db.events.stats()
MongoDB 将返回以下内容:
{ "ns" : "test.events", ... "capped" : false, ... }
要将events
集合转换为固定大小集合并查看更新的集合信息,请运行以下命令:
db.runCommand( { convertToCapped: 'events', size: 8192 } ) db.events.stats()
MongoDB 将返回以下内容:
{ "ns" : "test.events", ... "capped" : true, "max" : NumberLong("9223372036854775807"), "maxSize" : 8192, ... }
convertToCapped
不会在新集合上重新创建原始集合中的索引,但 _id
字段上的索引除外。如果需要此集合的索引,您需要在转换完成后创建这些索引。