对于初学者来说,开始使用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感兴趣。