如何創建和管理集合
更新時間 2023-11-29 21:20:06
最近更新時間: 2023-11-29 21:20:06
分享文章
本頁介紹了如何創建文檔數據庫服務集合。
創建集合
在文檔數據庫服務中,創建集合的步驟如下:
- 首先使用或者創建數據庫。
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()刪除整個集合。