MongoDB 是一个丰富的面向文档的 NoSQL 数据库。
在本文中,我会分享一些有关 MongoDB 命令的基本知识,例如查询、过滤数据、删除、更新等等。
好的,我们开始吧!
配置
为了使用 MongoDB,首先需要在计算机上安装 MongoDB。为此,请访问官方下载中心,下载适用于你的操作系统的版本。在这篇文章里,我会以 Windows 为例。
下载 MongoDB 社区服务器设置后,你将依次点击“下一个”完成安装。完成后,转到安装了 MongoDB 的 C 驱动器。打开程序文件,然后选择 MongoDB 目录。
C: -> Program Files -> MongoDB -> Server -> 4.0(version) -> bin
在 bin 目录中,你会发现几个有趣的可执行文件。
- mongod
- mongo
我们看一下这两个文件。
mongod 代表“ Mongo Daemon”。mongod 是 MongoDB 使用的后台进程。mongod 的主要目的是管理所有 MongoDB 服务器任务,例如:接受请求,响应客户端和内存管理。
mongo 是可以与客户端(例如,系统管理员和开发人员)进行交互的命令行外壳。
现在,让我们看看如何启动和运行该服务器。在 Windows 上,首先需要在 C 驱动器中创建几个目录。在 C 驱动器中打开命令提示符,然后执行以下操作:
C:> mkdir data/dbC:> cd dataC:> mkdir db
这些目录的目的是 MongoDB 需要一个文件夹来存储所有数据。MongoDB 的默认数据目录路径是驱动器上的 /data/db
。因此,有必要像这样提供这些目录。
如果启动不带这些目录的 MongoDB 服务器,则可能会看到以下错误:
创建完这两个文件后,再次转到 mongodb 目录中的 bin 文件夹,然后打开其中的 shell。运行以下命令:
mongod
瞧! 现在,我们的 MongoDB 服务器已启动并正在运行!?
为了使用此服务器,我们需要一个中介器。在 bind 文件夹中打开另一个命令窗口,然后运行以下命令:
mongo
运行此命令后,导航到运行 mongod 命令的外壳程序(这是我们的服务器)。你会在最后看到“接受连接”消息。这意味着我们的安装和配置成功!
只需在 mongo shell 中运行即可:
db
配置环境变量
为了节省时间,你可以设置环境变量。在 Windows 中,通过以下菜单完成:
Advanced System Settings -> Environment Variables -> Path(Under System Variables) -> Edit
只需复制我们的 bin 文件夹的路径,然后运行它。在我的这个示例里,是这样的:
C:Program FilesMongoDBServer4.0bin
现在你就完成设置了!
使用 MongoDB
大量的 GUI 图形用户界面(例如 MongoDB Compass,Studio 3T 等)可和 MongoDB 服务器一起使用。
它们提供了图形界面,因此你可以轻松地使用数据库并执行查询,而无需使用 Shell 并手动键入查询。
但是在本文中,我们将使用命令提示符来完成工作。
现在我们深入研究 MongoDB 命令,这些命令将帮助你在将来的项目中使用。
- 打开命令提示符,然后键入
mongod
以启动 MongoDB 服务器。 - 打开另一个外壳,然后键入
mongo
以连接到 MongoDB 数据库服务器。
1. 确定你目前在哪个数据库
db
此命令将显示你当前所在的数据库。test
是默认情况下的初始数据库。
2. 罗列数据库
show databases
我目前有四个数据库:CrudDB
, admin
, config
和 local
。
3. 访问某个数据库
use <your_db_name>
在这里,我已移至 local
数据库。你可以使用命令 db
打印出当前数据库的名称,进行检查。
4. 创建一个数据库
使用 RDBMS(关系数据库管理系统),我们可以获得数据库、表、行和列。
但是,在 NoSQL 数据库(例如 MongoDB)中,数据以 BSON 格式(JSON 的二进制版本)存储。它们存储在称为“集合”的结构中。
在 SQL 数据库中,这些类似于表。
接下来,我们谈谈如何在 mongo shell 中创建数据库。
use <your_db_name>
等一下,我们之前有这个命令! 为什么我再次使用它?
在 MongoDB 服务器中,如果你的数据库已经存在,则使用该命令将导航到你的数据库。
但是,如果数据库尚不存在,则 MongoDB 服务器将为你创建数据库。然后,它将导航到其中。
创建新数据库后,运行 show database
命令将不会显示你新创建的数据库。这是因为,当数据库包含一些数据(文档)后,它才会显示在你的数据库列表中。
5. 创建一个集合
使用 use
命令导航到新创建的数据库。
实际上,有两种创建集合的方法。
一种方法是将数据插入到集合中:
db.myCollection.insert({"name": "john", "age" : 22, "location": "colombo"})
即使该集合不存在,这也将创建你的集合 myCollection
。然后它将插入带有 name
和 age
的文档。这些是无上限的集合。
第二种方法如下所示:
2.1 创建一个无上限的集合
db.createCollection("myCollection")
2.2 创建一个有上限的集合
db.createCollection("mySecondCollection", {capped : true, size : 2, max : 2})
这样,你将无需插入数据即可创建集合。
“有上限的集合”规定了最大的文档数,可防止文档溢出。在此示例中,我通过将其值设置为 true
启用上限。
size : 2
表示限制为 2MB,max: 2
将最大文档数设置为 2。
现在,如果你尝试在 mySecondCollection
中插入两个以上的文档,并使用 find
命令(我们将在稍后讨论),你只会看到最近插入的文档。请记住,这并不意味着第一个文档已被删除——它只是未显示。
6. 插入数据
我们可以将数据插入到新集合或之前创建的集合中。
有三种插入数据的方法:
insertOne()
仅用于插入单个文档insertMany()
用于插入多个文档insert()
用于插入所需数量的文档
下面是一些示例:
- insertOne()
db.myCollection.insertOne(
{
"name": "navindu",
"age": 22
}
)
- insertMany()
db.myCollection.insertMany([
{
"name": "navindu",
"age": 22
},
{
"name": "kavindu",
"age": 20
},
{
"name": "john doe",
"age": 25,
"location": "colombo"
}
])
insert()
方法类似于 insertMany()
方法。
另外,请注意,我们在文档中为 John Doe
插入了一个名为 location
的新属性。因此,如果你使用 find
,则只会看到 john doe
具有 location
属性。
对于 NoSQL 数据库(例如 MongoDB),这可能是一个优势,有利于可扩展性。
7. 查询数据
你可以通过以下方法查询集合中的所有数据:
db.myCollection.find()
如果你想通过更清晰的方式查看此数据,只需在其末尾添加 .pretty()
即可。这将以漂亮的 JSON 格式显示文档。
db.myCollection.find().pretty()
等等,在这些示例中,你是否注意到了类似 _id
的东西?
无论何时插入文档,MongoDB 都会自动添加一个 _id
字段。该字段唯一地标识每个文档。如果你不想显示它,只需运行以下命令:
db.myCollection.find({}, _id: 0).pretty()
接下来,我们看一下过滤数据。
如果要显示某些特定文档,则可以指定要显示的文档的单个详细信息。
db.myCollection.find(
{
name: "john"
}
)
假设你只想显示年龄在 25 岁以下的人。您可以使用 $lt
对此进行过滤。
db.myCollection.find(
{
age : {$lt : 25}
}
)
同样,$gt
表示大于,$lte
表示“小于或等于”,$gte
表示“大于或等于”,$ne
是“不等于”。
8. 更新文档
假设你想更新某人的地址或年龄,该怎么做? 请看下一个例子:
db.myCollection.update({age : 20}, {$set: {age: 23}})
第一个参数是要更新哪个文档的字段。在这里,我为简单起见指定了 age
。在生产环境中,你可以使用 _id
字段。
最好使用 _id
之类的内容来更新特定的一行。 这是因为多个字段可以具有相同的年龄和名称。 因此,如果更新一行,它将影响具有相同名称和年龄的所有行。
如果你使用新属性(例如 location
)更新文档,则文档将使用新属性进行更新。如果你执行 find
,那么结果是:
如果你需要从单个文档中删除某个属性,则可以执行以下操作(假设你希望删除 age
):
db.myCollection.update({name: "navindu"}, {$unset: age});
9. 删除一个文档
如前所述,当你更新或删除文档时,你只需要指定 _id
即可,而不是 name
,age
,location
。
db.myCollection.remove({name: "navindu"});
10. 删除一个集合
db.myCollection.remove({});
注意,这不等于 drop()
方法。不同之处在于 drop()
用于删除集合中的所有文档,而 remove()
方法用于删除集合本身以及所有文档。
逻辑运算符
MongoDB 提供逻辑运算符。下图总结了不同类型的逻辑运算符。
假设你要显示年龄小于 25 岁且位置在科伦坡的人,怎么做呢?
我们可以使用 $and
运算符!
db.myCollection.find({$and:[{age : {$lt : 25}}, {location: "colombo"}]});
最后,我们来谈谈聚合。
聚合
快速看一下我们了解到的有关 SQL 数据库中聚合函数的知识:
简而言之,聚合对多个文档中的值进行分组并以某种方式进行汇总。
想象一下,如果我们在 recordBook
集合中有男女学生,而我们希望每个学生都有总数。为了获得男生和女生的总和,我们可以使用 $group
聚合函数。
db.recordBook.aggregate([
{
$group : {_id : "$gender", result: {$sum: 1}}
}
]);
总结
我们讨论了 MongoDB 基础,将来构建应用程序时可能需要用到。希望你喜欢这篇文章。谢谢阅读!
原文:How to get started with MongoDB in 10 minutes,作者:Navindu Jayatilake
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/310168.html