对于初学者来说,开始使用MongoDB HTML标签和内容

学习MongoDB,安装指南和基本操作。

MongoDB NoSQL正变得比以往更受欢迎。您对它有必要的了解吗?

如果没有,以下内容将帮助您。

简介

随着网站向 dynamic content 转变,对无SQL数据库的需求也在增加。这催生了许多无SQL数据库,如 MongoDB

MongoDB被归类为无SQL数据库,它是一种基于文档的数据库,它以JSON文档的形式存储数据,并为每个文档生成一个自动生成的标识符。

无SQL数据库是一种表结构不固定的数据库,不像结构化的SQL数据库。MongoDB以JSON字符串的形式存储数据,而不受特定列中属性数量或属性名称的限制。

这使得开发人员可以快速更改实体,而无需对数据库进行任何更改。

安装MongoDB

与其他数据库一样,MongoDB有多个变体,根据开发需求提供。下面列出了这些变体,并可从此处下载或使用 link

  • MongoDB Atlas – 作为服务的数据库
  • 社区服务器 – 免费供开发者社区使用
  • MongoDB企业版 – 具有附加功能的商业版

每个变体都与每个操作系统完全兼容。要开始安装社区服务器,请根据操作系统下载相应的安装文件。

每个操作系统的安装过程略有不同,因此我们将逐个介绍每个操作系统的安装过程。

在MacOS上安装

要在MacOS上安装MongoDB,请下载包含必要二进制文件的 .tgz 归档文件。解压文件后,您应该能够在 bin 文件夹中看到一堆二进制文件。

  • 将 bin 文件夹移动到所需位置
  • 打开终端并将目录更改为上述 bin 目录
  • 执行下面的命令在所需位置创建数据库。
$ ./mongod --dbpath /path-to-desired-directory/

在上面的命令中,将路径替换为您所需的路径,命令执行后服务器将启动。

在Windows上安装

MongoDB下载中心提供了一个可执行的 .msi 包,用于在Windows上安装MongoDB。Windows上的安装非常简单,一旦下载完成即可使用几个命令完成安装。

  • 执行以下命令在Windows PC/服务器上安装MongoDB。
> cd /setup-folder/
> msiexec.exe /q /i .msi ^
INSTALLLOCATION="C:Program FilesMongoDB" ^
ADDLOCAL="MonitoringTools,ImportExportTools,MiscellaneousTools"

上述命令将带您进入相应的目录,并在指定位置执行安装设置。安装完成后,您需要为MongoDB配置默认数据库存储路径。

以下命令可以帮助您配置。

> md dbdata

上面的命令将在命令提示符当前指向的目录中创建一个 db/data 文件夹。如果需要重新配置数据库,可以使用 mongod.exe 和 dbpath 参数,如下所示:

>"C:Program FilesMongoDBbinmongod.exe" --dbpath d:tutorialmongodbdata

在Linux上安装

与MacOS下载类似,Linux版本的MongoDB也以一组归档二进制文件的形式提供。安装MongoDB的过程非常类似。

  • 将二进制文件移动到所需位置
  • 在文件夹中打开终端
  • 使用所需的DB位置执行以下命令
$ ./mongod --dbpath /path-to-desired-directory/

创建第一个集合

MongoDB以JSON文档的形式存储数据。这样的文档组合在MongoDB中被称为集合。因此,集合类似于关系数据库中的表,而文档类似于记录。

要存储文档,我们首先需要创建一个集合。关于集合的一个令人兴奋的事情是,与SQL数据库不同,您不需要在其中指定列名或数据类型。

创建集合的第一步是创建数据库。要通过命令行创建数据库并连接到它,请从MongoDB安装主目录执行以下命令。

$ ./bin/mongo tutorial

该命令用于启动数据库连接并同时连接到教程数据库。它将显示一系列的日志行,表示命令行已连接到MongoDB数据库。

下面显示了一个示例命令行图像,以便更好地了解。

  • 要创建集合,请执行以下命令:
$ > db.createCollection('firstCollection');

以上是如何创建一个空集合。下一步是插入数据并在记录上使用MongoDB命令行进行一些处理。

将文档插入集合

如上所述,几乎可以将任何JSON插入到每个MongoDB集合中。

让我们从将第一个JSON文档插入到上面创建的firstCollection集合开始。

> db.firstCollection.insertOne({name:'Abhishek',skill:'MongoDB'});

上述命令将一个JSON文档插入firstCollection。可以使用下面显示的命令进行验证:

> db.firstCollection.find();

上述命令具有多个用途,取决于find()函数的变体。当没有指定参数时,如上述命令,它从集合中获取所有可用文档。

您可以插入一条记录并尝试相同的操作。这样做后,上述命令的输出将类似于下面显示的内容:

> db.firstCollection.find();
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }

可以看到,有两个可用的记录被显示。可以很容易地使用find()函数根据特定参数筛选文档。让我们使用名称属性过滤文档。

过滤过程很简单,可以从下面的命令中理解:

db.firstCollection.find({name:'Abhishek'});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }

过滤还可以在JSON中使用多个属性。虽然可以向查询添加任意数量的参数,但此方法的限制是它仅与属性的确切值匹配。

使用正则表达式筛选记录

为了执行与MySQL的like 子句相当的MongoDB等效语句,MongoDB使用正则表达式。 正则表达式是一系列字符,形成一个匹配的模式。正则表达式字面量类似于ones used in Javascript

对于当前的集合,我们将尝试通过匹配技能属性的模式来获取数据。以下命令获取具有MongoDB技能的人员列表。因此,它将获取两条记录,因为两者都包含字符串MongoDB。

> db.firstCollection.find({skill:/.*MongoDB.*/});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }
> db.firstCollection.find({skill:/.*Java.*/});
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java,MongoDB,NodeJS" }

以上代码显示了正则表达式形式的两个不同字符串的结果。第一个查询获取了技能属性包含关键字MongoDB的文档列表,而第二个查询只获取了精通Java的人员。

基于条件查询的下一个挑战是使用OR或AND条件进行查询。

MongoDB中的复杂查询

从上述命令可以清楚地看出,MongoDB的where子句适用于JSON。组合条件的过程也取决于JSON本身。MongoDB提供了$or、$and和$not等操作符来执行相关的查询操作。

让我们尝试获取name属性包含Abhishek或skill包含Java的文档列表。

> db.firstCollection.find({$or: [{name:'Abhishek'},{skill:/.*Java.*/}]});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Geekflare", "skill" : "Java,MongoDB,NodeJS" }

如上所示,它获取了两条记录。您可以尝试将name属性设置为Geekflare,并观察变化。只有具有三个技能和名字为Geekflare的文档将被显示。

类似地,可以使用$and操作符和条件的JSON数组,如上所示。

对于下一组操作符,我们需要创建另一个集合并使用以下命令添加一些记录。

> db.createCollection('studentmarks');
{ "ok" : 1 }
> db.studentmarks.insertMany([{name:'A',marks:20},{name:'B',marks:25},{name:'C',marks:22},{name:'D',marks:30}]);
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5b06e7b5c29a7184535e783c"),
		ObjectId("5b06e7b5c29a7184535e783d"),
		ObjectId("5b06e7b5c29a7184535e783e"),
		ObjectId("5b06e7b5c29a7184535e783f")
	]
}

我们将使用查询中的比较操作符的下一组操作符。要使用诸如小于大于不等于的标准来比较值,我们在传递的值中使用相关的操作符。

下面是一个获取成绩大于22的学生列表的示例。

db.studentmarks.find({marks:{$gt:22}});
{ "_id" : ObjectId("5b06e7b5c29a7184535e783d"), "name" : "B", "marks" : 25 }
{ "_id" : ObjectId("5b06e7b5c29a7184535e783f"), "name" : "D", "marks" : 30 }

这里的$gt表示大于的条件。因此,显示了成绩大于22的文档。同样,还有其他可以使用的操作符。它们如下所示。

操作符 用途 示例
$eq 检查值是否相等 {marks:{$eq:20}}
$lt 检查值是否小于 {marks: {$lt:20}}
$gte 检查值是否大于或等于 {marks:{$gte:22}}
$lte 检查值是否小于或等于 {marks:{$lte:22}}
$ne 检查值是否不等于 {marks:{$ne:22}}
$in 检查值是否等于数组中的任一值 {marks:{$in:[20,22]}}
$nin 检查值是否不等于数组中的任何值 {marks:{$nin:[22,25]}}

更多内容请访问MongoDB commands here

MongoDB的GUI工具

在上面的讨论中,我们使用了命令行来执行MongoDB查询。

对于复杂查询和大量数据,使用命令行可能会有一些挑战。为了更方便地查看数据和执行查询,MongoDB提供了一个名为MongoDB Compass的优秀GUI工具。

MongoDB Compass可以从MongoDB downloads site轻松下载。下载并安装MongoDB Compass后,启动应用程序,你将会看到一个类似下面截图的界面。

假设你已经启动并运行了MongoDB服务器,点击默认细节连接。你将登录并显示可用数据库的列表。

点击教程数据库,查看教程数据库中的集合列表。如下所示,它会显示教程数据库中可用的集合列表。

点击集合后,会显示包含必要控件以使用JSON过滤记录的文档列表,还可以根据我们的需要以JSON格式或表格格式查看文档。

GUI还简化了添加文档的过程。你只需要点击下面截图中的插入文档按钮。它会打开一个小对话框,要求输入文档细节,并自动生成一个文档ID。

GUI简化了许多可能难以使用MongoDB命令行界面执行的操作。

你可以探索更多内容NoSQL client

结论

通过各种示例,我们捕捉到了NoSQL的精髓,并了解了安装方法,以及文档与典型关系型数据库记录的区别。你还可以参考这个learning MongoDB from scratch在线课程。

如果你是开发人员,你可能会对this one感兴趣。

类似文章