分享到

简介

MongoDB 使用面向文档的结构来存储、管理和处理数据。单个文档被组织成集合,而集合又存储在数据库中。由于每个文档的模式不是由静态模式定义的,因此基于文档的系统比由表和记录组成的关系系统提供更大的灵活性。

在本指南中,我们将讨论如何创建和管理 MongoDB 用于组织数据的结构。我们将介绍如何创建和管理数据库,然后如何创建集合来保存相似或相关的文档。

如何查看现有数据库

在开始创建新数据库之前,熟悉 MongoDB 提供的一些查找现有数据库信息的方法会很有帮助。这可以帮助您在开始进行更改之前了解系统的当前状态。

要显示系统上您有权访问的所有数据库,请使用show dbs方法

show dbs
admin 0.000GB
config 0.000GB
local 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.000GB
config 0.000GB
local 0.000GB

要实际创建新数据库,我们首先需要创建一些东西。

如何查看数据库中的集合

在 MongoDB 中,集合是用于使用您想要实现的任何分类系统将文档分组在一起的结构。它们存在于数据库中并存储文档。

您可以使用show collections方法查看当前使用的数据库中的可用集合。

在这里,我们将切换到admin数据库,该数据库有一些集合可供演示

use admin
show collections
system.roles
system.users
system.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 playground
db.equipment.insert({name: "slide"})
switched to db playground
WriteResult({ "nInserted" : 1 })

输出表明写入了一个文档。上面的命令执行了三个独立的操作。首先,MongoDB 创建了我们在use命令中引用的playground数据库。它还在数据库中创建了equipment集合,因为我们对该集合名称调用了insert()命令。最后,它使用我们提供给insert()命令的输入在equipment集合中创建实际文档。

您可以使用以下命令验证所有这些操作是否已执行

show dbs
show collections
db.equipment.count()
db.equipment.find()

输出应该显示playground数据库现在已列在数据库列表中,equipment集合已列出,equipement集合中有一个文档,并且该文档是我们在命令中插入的{name: "slide"}文档。

创建集合的另一个选项是显式使用db.createCollection()方法。这允许您在不向集合添加任何文档的情况下创建集合。

例如,您可以在playground数据库中创建一个名为maintenance.requests的新集合,方法是键入

db.createCollection("maintenance.requests")
{ "ok" : 1 }

我们可以验证新集合在查询时是否显示,但它没有文档

show collections
db.maintenance.requests.count()
equipment
maintenance.requests
0

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
equipment
maintenance.requests

如何删除数据库

要删除整个数据库,请调用db.dropDatabase()命令。这将删除当前数据库,因此在执行之前请确保您在正确的数据库上

use playground
db.dropDatabase()
switched to db playground
{ "dropped" : "playground", "ok" : 1 }

如果您检查可用数据库列表,playground不再显示

show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

由于我们尚未切换到新数据库,因此如果我们选择添加新集合或文档,MongoDB 仍将设置为创建playground数据库。您可以使用db命令验证这一点

db
playground

结论

在使用 MongoDB 时,创建和管理数据库和集合是一项重要技能。这些基本的组织工具允许您将相关文档分组在一起,查询信息的子集,并为不同类型的数据设置授权策略。熟悉如何有效管理这些结构将使您能够更有效地管理数据,减少意外。

常见问题解答

是的,您可以在 MongoDB 数据库中拥有多个集合。集合可以被认为是关系数据库中表的类似物。

没有一个命令可以删除 MongoDB 中的所有数据库,但可以通过脚本或一系列查询来实现。

要删除数据库,基本语法如下所示

use playground
db.dropDatabase()

要在 MongoDB 中重命名集合,可以使用renameCollection()方法。

基本语法如下所示

db.collectionName.renameCollection("new collection name")

其中collectionName是集合的当前名称,"new collection name"是所需的更改。

您可以使用show collections方法显示您正在使用的数据库中的所有可用集合。

如果您想查看admin数据库中的所有集合,基本语法如下所示

use admin
show collections

或者,您也可以使用db.getCollectionNames()方法以数组形式获取相同的结果。

db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]

要将 MongoDB 与 C# 结合使用,您需要下载兼容的 C# 驱动程序版本。

下载后,您将能够使用 C# 执行读取操作,例如列出集合。

作者简介
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直撰写关于数据库、Linux、基础设施和开发工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。
© . This site is unofficial and not affiliated with Prisma Data, Inc.