簡介
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" ]
為了將 MongoDB 與 C# 一起使用,您需要下載 相容的 C# 驅動程式版本。
下載後,您將能夠使用 C# 執行讀取操作,例如列出集合。
