创建集合
在文档数据库服务中,创建集合的步骤如下:
- 首先使用或者创建数据库。
use mydatabase
- 创建集合使用 db.createCollection()方法。
db.createCollection("authors")
- 也可以在插入文档时动态创建集合。
db.authors.insertOne({name: "John"})
上述语句中,authors集合会在插入文档时自动创建。
- 指定可选参数来创建集合。
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 }
- 查看当前数据库中的所有集合。
show collections
- 删除集合使用 db.collection.drop()。
db.authors.drop()
- 重命名集合使用 db.renameCollection()。
db.renameCollection("oldCollection", "newCollection")
创建集合时请留意:
- 集合名不能以 “system”、“.”或 “$”开始。
- 集合名不应超过128字节。
- 集合名不能包含“.”。
创建固定集合
固定集合是指那些集合的大小或者文档数有最大值,当集合的大小或者数量超过最大值后, 集合的最早存储的值会被自动删除掉 。
如下命令创建了一个集合,最大值是50MB,文档数量最多为500000。
db.createCollection("bookmark", { capped : true, size : 52428800, max : 500000 } )
创建分片集合
在文档数据库服务分片集群中,要想使用分片功能,首先要创建分片集合。
主要步骤是:
- 首先创建分片键索引。分片集合必须有分片键索引。
db.collection.createIndex({ <shard key> : 1 }, {name: <index name>})
例如:
db.users.createIndex({ "user_id": 1 }, {name: "userid_1"})//这里的1表示指定升序索引
- 然后使用 sh.enableSharding()启用分片功能。
sh.enableSharding("<database name>")
- 再用 sh.shardCollection()将集合分片。
sh.shardCollection("<database name>.<collection name>",
{ <shard key> : 1 },
{ <options> }
)
例如:
sh.shardCollection("mydatabase.users",
{ "user_id" : 1 },
{ "requireIndex" : true }
)
这里我们使用 user_id作为分片键。
- 如果想分割已存在的集合,可以使用 shardCollection时的 splitAt选项。
sh.shardCollection("mydatabase.largecollection",
{ score : 1 },
{ splitAt : { score : 1000 } }
)
这里我们指定在 score = 1000 处分割集合,表示将 "score" 字段的值小于或等于 1000 的文档分配到一个分片中,而将 "score" 字段的值大于 1000 的文档分配到另一个分片中 。
通过上述步骤就可以创建了分片集合。文档数据库服务会自动将集合数据分布到各个分片上。
文档数据库服务分片集群支持两种分片策略:
- 范围分片,支持基于Shard Key的范围查询。
- 哈希分片,能够将写入均衡分布到各个Shard。
删除集合
执行 db.collection_name.drop()删除整个集合。