convertToCapped
定义
convertToCapped
convertToCapped
命令将现有非固定集合转换为同一数据库中的固定集合。
兼容性
此命令可在以下环境中托管的部署中使用
MongoDB Atlas:面向云中MongoDB部署的全托管服务
重要
此命令不支持在无服务器实例上运行。有关更多信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅、自行管理的MongoDB版本
MongoDB Community:源代码可用的、免费使用且可自行管理的MongoDB版本
语法
该命令具有以下语法
db.runCommand( { convertToCapped: <collection>, size: <capped size>, writeConcern: <document>, comment: <any> } )
命令字段
该命令包含以下字段
字段 | 描述 |
---|---|
convertToCapped | 要转换的现有集合名称。 |
大小 | 固定集合的最大大小(以字节为单位)。 |
writeConcern | 可选。一个文档,表示 drop 命令的写关注。省略以使用默认写关注。 |
comment | 可选。用户提供的注释,附加到该命令。一旦设置,此注释将出现在以下位置的此命令记录旁边
注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。 |
convertToCapped
函数接受一个现有集合(<collection>
),并将其转换为最大字节数由 size
参数(<capped size>
)指定的 capped 集合。
在转换过程中,convertToCapped
命令表现出以下行为
MongoDB 以 自然顺序遍历原始集合中的文档,并将文档加载到新的 capped 集合中。
如果为 capped 集合指定的
capped size
小于原始未 capped 集合的大小,那么 MongoDB 将根据插入顺序(或 先进先出 顺序)覆盖 capped 集合中的文档。内部,MongoDB 使用以下步骤转换集合
cloneCollectionAsCapped
命令创建 capped 集合并导入数据。MongoDB 删除原始集合。
renameCollection
将新的 capped 集合重命名为原始集合的名称。
此操作在整个操作期间保持数据库独占锁。其他锁定同一数据库的操作将在操作完成之前被阻塞。有关锁定数据库的操作,请参阅 一些常见客户端操作会锁定哪些锁?。
警告
convertToCapped
不会从原始集合重新创建索引到新集合,除了 _id
字段的索引。如果您需要此集合的索引,您需要在转换完成后创建这些索引。
示例
转换集合
以下示例使用 db.collection.insertOne()
来创建一个 events
集合,并使用 db.collection.stats()
获取集合信息
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
字段的索引。如果您需要此集合的索引,您需要在转换完成后创建这些索引。