简介
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# 执行读取操作,例如列出集合。