簡介
MongoDB 使用文件導向結構來儲存、管理和處理資料。個別的文件會組織成集合,而集合又儲存在資料庫中。由於每個文件的結構描述並非由靜態結構描述定義,因此文件式系統比由表格和記錄組成的關聯式系統提供更大的彈性。
在本指南中,我們將討論如何建立和管理 MongoDB 用於組織資料的結構。我們將涵蓋如何建立和管理資料庫,以及如何建立集合以保存相似或相關的文件。
如果您正在使用 MongoDB,請查看 Prisma 的 MongoDB 連接器!您可以使用 Prisma Client 來自信地管理生產環境的 MongoDB 資料庫。
若要開始使用 MongoDB 和 Prisma,請查看我們的從頭開始入門指南,或如何新增至現有專案。
如何檢視現有資料庫
在我們開始建立新的資料庫之前,先熟悉 MongoDB 提供的一些方法來尋找有關現有資料庫的資訊會很有幫助。這可以幫助您在開始進行變更之前,了解系統的目前狀態。
若要顯示系統上您有權存取的所有資料庫,請使用 show dbs
方法
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB 將會回應系統上所有可存取資料庫的名稱,以及其目前儲存空間的摘要。
若要查看您目前設定要操作的資料庫,請使用 db.getName()
指令或其簡寫別名 db
db
test
您可能會發現您目前正在使用的資料庫並未在 show dbs
指令中列出。這是因為在 MongoDB 中,在您將第一個文件寫入資料庫之前,資料庫實際上並未建立。因此,在上面的範例輸出中,Shell 已準備好對 test
資料庫進行操作,但由於它尚不存在,因此 show dbs
指令不會傳回它。
若要切換到不同的資料庫,您可以使用 use
指令
use admin
switched to db admin
若要取得有關目前資料庫的一些基本資訊,您可以使用 db.stats()
方法
db.stats()
{"db" : "admin","collections" : 3,"views" : 0,"objects" : 4,"avgObjSize" : 278.25,"dataSize" : 1113,"storageSize" : 86016,"indexes" : 5,"indexSize" : 147456,"totalSize" : 233472,"scaleFactor" : 1,"fsUsedSize" : 2876923904,"fsTotalSize" : 25832407040,"ok" : 1}
輸出會顯示有關資料庫中集合數量、儲存統計資訊、索引資訊等的資訊。
如何建立資料庫
MongoDB 沒有用於建立新資料庫的明確指令。相反地,如先前所述,您必須指示 MongoDB 您想要將新文件寫入新的資料庫。當這些文件建立時,它們會隱含地建立資料庫。
若要準備 MongoDB 以寫入新的資料庫,請發出 use
指令以切換到不存在的資料庫。
在這裡,我們將設定 MongoDB 以建立一個名為 playground
的新資料庫
use playground
switched to db playground
如果您檢查目前的資料庫,它將會確認 playground
資料庫目前是資料庫相關指令的目標
db
playground
但是,如先前所述,由於我們尚未建立任何文件,因此資料庫本身尚未建立
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
若要實際建立新的資料庫,我們需要先建立一些東西。
如何檢視資料庫中的集合
在 MongoDB 中,「集合」是用於將文件分組在一起的結構,您可以使用任何您想要實作的分類系統。它們存在於資料庫中並儲存文件。
您可以使用 show collections
方法來查看您目前使用的資料庫中可用的集合。
在這裡,我們將切換到 admin
資料庫,其中有一些可用的集合用於示範
use adminshow collections
system.rolessystem.userssystem.version
或者,您可以使用 db.getCollectionNames()
方法,以陣列形式擷取相同的集合名稱
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
若要顯示有關目前資料庫中集合的其他資訊,請使用 db.getCollectionInfos()
方法
db.getCollectionInfos()
[{"name" : "system.roles","type" : "collection","options" : {},"info" : {"readOnly" : false,"uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627")},"idIndex" : {"v" : 2,"key" : {"_id" : 1},"name" : "_id_"}},{"name" : "system.users","type" : "collection","options" : {},"info" : {"readOnly" : false,"uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5")},"idIndex" : {"v" : 2,"key" : {"_id" : 1},"name" : "_id_"}},{"name" : "system.version","type" : "collection","options" : {},"info" : {"readOnly" : false,"uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb")},"idIndex" : {"v" : 2,"key" : {"_id" : 1},"name" : "_id_"}}]
您也可以選擇性地將文件傳遞到指令,以篩選結果。例如,如果您只對查看有關 system.version
集合的資訊感興趣,您可以輸入
db.getCollectionInfos({name: "system.version"})
[{"name" : "system.version","type" : "collection","options" : {},"info" : {"readOnly" : false,"uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb")},"idIndex" : {"v" : 2,"key" : {"_id" : 1},"name" : "_id_"}}]
若要檢查集合包含多少文件,請使用 db.<collection>.count()
方法。例如,以下指令會檢查 system.users
集合中有多少文件
db.system.users.count()
2
若要檢視有關目前資料庫中集合的基本統計資訊,請使用 db.printCollectionStats()
方法
db.printCollectionStats()
此指令可能會輸出超出您容易理解的資訊,但包含在某些需要深入了解集合特性的情況下會很有幫助。
如何建立集合
若要建立新的集合,有兩個選項:您可以隱含或明確地建立集合。
與資料庫一樣,MongoDB 可以在第一次將文件寫入集合時自動建立集合。此方法會指示 MongoDB 透過將文件插入尚不存在的集合中來建立新的集合。
例如,我們可以切換回我們稍早感興趣的 playground
資料庫。進入該命名空間後,我們可以透過在我們想要用於新集合的名稱上呼叫 insert.()
指令,將新文件插入集合中。在這裡,我們可以在名為 equipment
的新集合中建立有關幻燈片的文件
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
輸出表示已寫入一個文件。上述指令執行了三個不同的動作。首先,MongoDB 建立了我們在 use
指令中引用的 playground
資料庫。它也在資料庫中建立了 equipment
集合,因為我們在該集合名稱上呼叫了 insert()
指令。最後,它使用我們提供給 insert()
指令的輸入,在 equipment
集合中建立實際的文件。
您可以使用以下指令驗證是否已執行所有這些動作
show dbsshow collectionsdb.equipment.count()db.equipment.find()
輸出應顯示 playground
資料庫現在已在列出的資料庫中,equipment
集合已列出,equipement
集合中存在一個文件,且該文件是我們在指令中插入的 {name: "slide"}
文件。
用於建立集合的另一個選項是明確使用 db.createCollection()
方法。這可讓您建立集合,而無需在其中新增任何文件。
例如,您可以在 playground
資料庫中建立一個名為 maintenance.requests
的新集合,方法是輸入
db.createCollection("maintenance.requests")
{ "ok" : 1 }
我們可以驗證當我們查詢新集合時,它會顯示出來,但它沒有任何文件
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
db.createCollection()
方法主要很有用,因為它可讓您在建立時指定各種選項。例如,我們可能想要建立一個「上限集合」,這是一種集合,它會透過在滿載時刪除最舊的文件來維持其配置大小的上限。
若要建立一個名為 notifications
的上限集合,最多可以儲存 10240 位元組的資訊,您可以呼叫
db.createCollection("notifications",{capped: true,size: 10240})
{ "ok" : 1}
這將建立一個上限 notification
集合,我們可以透過輸入來驗證
db.getCollecitonInfos({"options.capped": true})
[{"name" : "notifications","type" : "collection","options" : {"capped" : true,"size" : 10240},"info" : {"readOnly" : false,"uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925")},"idIndex" : {"v" : 2,"key" : {"_id" : 1},"name" : "_id_"}}]
如何刪除集合
若要刪除集合,您可以在集合本身上使用 drop()
方法。
例如,若要刪除我們建立的上限 notifications
集合,您可以輸入
db.notifications.drop()
true
您可以透過再次列出目前資料庫中的集合來驗證操作是否成功
show collections
equipmentmaintenance.requests
如何刪除資料庫
若要刪除整個資料庫,請呼叫 db.dropDatabase()
指令。這將會刪除目前的資料庫,因此在執行之前,請務必確認您位於正確的資料庫上
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
如果您檢查可用資料庫的清單,playground
將不再顯示
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
由於我們尚未切換到新的資料庫,因此 MongoDB 仍然設定為在我們選擇新增新的集合或文件時建立 playground
資料庫。您可以使用 db
指令來驗證這一點
db
playground
結論
建立和管理資料庫與集合是使用 MongoDB 時的重要技能。這些基本的組織工具可讓您將相關文件分組在一起、查詢資訊子集,以及為不同類型的資料設定授權原則。熟悉如何有效地管理這些結構將使您能夠更有效地管理資料,並減少意外情況。
如果您正在使用 MongoDB,請查看 Prisma 的 MongoDB 連接器!您可以使用 Prisma Client 來自信地管理生產環境的 MongoDB 資料庫。
若要開始使用 MongoDB 和 Prisma,請查看我們的從頭開始入門指南,或如何新增至現有專案。
常見問題
是的,您可以在 MongoDB 的資料庫中擁有多個集合。集合可以被認為類似於關聯式資料庫中的表格。
若要在 MongoDB 中重新命名集合,您可以使用 renameCollection()
方法。
基本語法如下所示
db.collectionName.renameCollection("new collection name")
其中 collectionName
是集合的目前名稱,而 "new collection name"
是想要的變更名稱。
您可以使用 show collections
方法來顯示您正在使用的資料庫中的所有可用集合。
如果您想要查看 admin
資料庫中的所有集合,基本語法如下所示
use adminshow collections
或者,您也可以使用 db.getCollectionNames()
方法以陣列形式取得相同的結果。
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]