文档数据库服务

如何创建和管理集合

2025-07-01 08:20:38

创建集合

在文档数据库服务中,创建集合的步骤如下:

1. 首先使用或者创建数据库。

use mydatabase

2. 创建集合使用 db.createCollection()方法。

db.createCollection("authors")

3. 也可以在插入文档时动态创建集合。

db.authors.insertOne({name: "John"})

上述语句中,authors集合会在插入文档时自动创建。

4. 指定可选参数来创建集合。

db.createCollection(<name>, { capped: <boolean>,//是否创建固定大小的集合,默认为false
                              autoIndexId: <boolean>,//若指定为false,表示禁止自动在_id字段创建索引
                              size: <number>,//如果创建的是固定大小的集合,指定集合的大小,单位为字节,默认为4096字节
                              max: <number>,//如果创建的是固定大小的集合,指定集合中文档的最大数量,默认为无限制
                              storageEngine: <document>,//指定集合的存储引擎,例如WiredTiger或MMAPv1等
                              validator: <document>,//指定集合的验证器,用于验证插入或修改的文档是否符合指定的规则
                              validationLevel: <string>,//validationLevel`这个选项用于指定对集合文档的校验级别,默认值为off(关闭文档验证),还有moderate(基本文档结构验证)和strict(严格模式验证)可选值
                              validationAction: <string>,//用于指定文档验证失败时的行为,默认值为error(文档验证失败时报错,不允许写入)。还有一个warn(文档验证失败时发出警告,但仍允许写入)
                              indexOptionDefaults: <document>,//指定集合中索引的默认选项,例如唯一性、稀疏性和过期时间等
                              viewOn: <string>,//如果创建的是视图集合,指定视图的来源集合
                              pipeline: <pipeline>,//如果创建的是视图集合,指定视图的聚合管道,用于对来源集合进行聚合操作
                              collation: <document>,//用于指定集合的校对规则
                              writeConcern: <document>//用于指定集合操作的写入关注级别
                              } 
)

回显信息如下表示创建成功: { "ok" : 1 }

5. 查看当前数据库中的所有集合。

show collections

6. 删除集合使用 db.collection.drop()。

db.authors.drop()

7. 重命名集合使用 db.renameCollection()。

db.renameCollection("oldCollection", "newCollection")

创建集合时请留意:

  • 集合名不能以 “system”、“.”或 “$”开始。

  • 集合名不应超过128字节。

  • 集合名不能包含“.”。

创建固定集合

固定集合是指那些集合的大小或者文档数有最大值,当集合的大小或者数量超过最大值后, 集合的最早存储的值会被自动删除掉 。 

如下命令创建了一个集合,最大值是50MB,文档数量最多为500000。

db.createCollection("bookmark", { capped : true, size : 52428800, max : 500000 } )

创建分片集合

在文档数据库服务分片集群中,要想使用分片功能,首先要创建分片集合。

主要步骤是:

1. 首先创建分片键索引。分片集合必须有分片键索引。

db.collection.createIndex({ <shard key> : 1 }, {name: <index name>})

例如:

db.users.createIndex({ "user_id": 1 }, {name: "userid_1"})//这里的1表示指定升序索引

2. 然后使用 sh.enableSharding()启用分片功能。

sh.enableSharding("<database name>")

3. 再用 sh.shardCollection()将集合分片。

sh.shardCollection("<database name>.<collection name>", 
                  { <shard key> : 1 },
                  { <options> }  
)

例如:

sh.shardCollection("mydatabase.users", 
                  { "user_id" : 1 },    
                  { "requireIndex" : true }
)

这里我们使用 user_id作为分片键。

4. 如果想分割已存在的集合,可以使用 shardCollection时的 splitAt选项。

sh.shardCollection("mydatabase.largecollection",  
                   { score : 1 },  
                   { splitAt : { score : 1000 } }
)

这里我们指定在 score = 1000 处分割集合,表示将 "score" 字段的值小于或等于 1000 的文档分配到一个分片中,而将 "score" 字段的值大于 1000 的文档分配到另一个分片中 。

通过上述步骤就可以创建了分片集合。文档数据库服务会自动将集合数据分布到各个分片上。

文档数据库服务分片集群支持两种分片策略:

  • 范围分片,支持基于Shard Key的范围查询。

  • 哈希分片,能够将写入均衡分布到各个Shard。

删除集合

执行 db.collection_name.drop()删除整个集合。


I.UjsaO2vOac