本文概述
- 介绍
- 安装MongoDB
- 创建第一个集合
- 将文档插入集合
- 使用正则表达式过滤记录
- MongoDB中的复杂查询
- MongoDB的GUI
MongoDB NoSQL的趋势比以往任何时候都大。你对此有必要的了解吗?
不用担心, 以下内容将为你提供帮助。
介绍 随着网站向动态内容的转变, 对No-SQL数据库的需求上升。这产生了许多No-SQL数据库, 例如MongoDB。
文章图片
MongoDB被分类为No-SQL数据库, 是一个基于文档的数据库, 该数据库以JSON文档的形式存储数据, 并为每个文档自动识别。
与结构化SQL数据库不同, No-SQL数据库是表结构不固定的数据库。 MongoDB以JSON字符串的形式存储数据, 而与特定列中的属性计数或属性名称无关。
这使开发人员可以快速更改实体, 而无需更改数据库级别。
安装MongoDB 像其他所有数据库一样, MongoDB可以根据开发需求提供多种变体。变体已在下面列出, 可以在此链接中使用或下载
- MongoDB Atlas –数据库即服务
- 社区服务器–开发人员社区可免费使用
- MongoDB企业版–具有附加功能的商业版
每个操作系统的安装过程略有不同, 因此我们将分别进行每个操作系统的安装。
在MacOS中安装
在MacOS中安装MongoDB。下载包含必需二进制文件的.tgz存档。在取消存档文件时, 你应该能够查看bin文件夹中的一堆二进制文件。
- 将bin文件夹移到所需位置
- 打开终端并将目录更改为上述的bin目录
- 执行以下命令以在所需位置创建数据库。
$ ./mongod --dbpath /path-to-desired-directory/
在上面的命令中, 将目录路径替换为所需的路径, 执行该命令后将立即启动服务器。
在Windows中安装
MongoDB下载中心提供了一个可执行的.msi软件包, 用于将MongoDB安装到Windows中。 Windows中的安装非常简单, 一旦下载了安装程序, 就可以使用一些命令来完成。
- 执行以下命令以在Windows PC /服务器中安装MongoDB。
>
cd /setup-folder/
>
msiexec.exe /q /i .msi ^
INSTALLLOCATION="C:\Program Files\MongoDB\" ^
ADDLOCAL="MonitoringTools, ImportExportTools, MiscellaneousTools"
上面的命令将带你到相应的目录, 并在指定位置执行安装安装程序。安装后, 你需要为MongoDB配置默认的数据库存储路径。以下命令可帮助你配置相同的内容
>
md \db\data
上面的命令在命令提示符当前指向的目录中创建一个db / data文件夹。如果需要再次重新配置数据库, 则可以将mongod.exe与dbpath参数一起使用, 如下所示:
>
"C:\Program Files\MongoDB\bin\mongod.exe" --dbpath d:\tutorial\mongodb\data
在Linux中安装
与MacOS下载类似, MongoDB for Linux变体也以二进制归档文件的形式提供。安装MongoDB的过程非常相似。
- 将二进制文件移到所需位置
- 打开文件夹中的终端
- 使用所需的数据库位置执行以下命令
$ ./mongod --dbpath /path-to-desired-directory/
创建第一个集合 MongoDB以JSON文档的形式存储数据。一组此类文档在MongoDB中统称为集合。因此, 集合类似于关系数据库中的表, 而文档类似于记录。
要存储文档, 我们首先需要创建一个集合。 NoSQL数据库的令人兴奋的事情是, 与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();
【MongoDB权威入门简介】根据find()函数的变体, 以上命令有多种用途。如果没有指定参数(如上述命令那样), 它将从集合中获取所有可用的文档。
你可以再插入一条记录, 然后尝试相同的操作。这样做时, 以上命令的输出将类似于以下所示:
>
db.firstCollection.find();
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
{ "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "GeekFlare", "skill" : "Java, MongoDB, NodeJS" }
可以看到, 显示了两个可用记录。使用find()函数可以轻松地基于特定参数来过滤文档。让我们使用name属性过滤文档。
筛选过程很简单, 可以从以下命令中了解它:
db.firstCollection.find({name:'Abhishek'});
{ "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Abhishek", "skill" : "MongoDB" }
过滤器还可以与JSON中的多个属性一起使用。尽管可以向查询添加任意数量的参数, 但是此方法的局限性在于它仅与属性的确切值匹配。
使用正则表达式过滤记录 要执行与MySQL like子句等效的MongoDB, MongoDB使用正则表达式。正则表达式是形成匹配图案的一系列字符。正则表达式文字与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, $和$ not等运算符提供了相关的查询操作。
让我们尝试获取名称属性包含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表示大于条件中的$ 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为你提供了一个出色的GUI工具, 称为MongoDB Compass。
可从MongoDB下载站点轻松下载MongoDB指南针。下载并安装MongoDB Compass之后, 启动该应用程序, 并且类似下面所示的屏幕也会很受欢迎。
文章图片
考虑到你已启动并运行MongoDB服务器, 请单击带有默认详细信息的连接。你应该登录并显示可用数据库列表。
单击教程数据库以查看教程数据库中的集合列表。如下所示, 它显示了教程数据库中可用集合的列表。
文章图片
单击集合后, 它会显示文档列表, 其中包含必要的控件以使用JSON过滤记录, 并根据我们的方便性以JSON格式或表格格式查看文档。
GUI还使添加文档更加简单。你所需要做的就是在下面显示的屏幕中单击” 插入文档” 按钮。它会打开一个小对话框, 询问带有自动生成的文档ID的文档详细信息。
文章图片
GUI简化了许多使用MongoDB命令行界面可能难以执行的操作。
总结
我们通过各种示例和对安装的理解来理解NoSQL的本质, 与典型的关系数据库记录相比, 文档之间的区别是什么。你也可以从头开始在线学习此学习MongoDB的课程。
而且, 如果你是开发人员, 那么你可能对此感兴趣。
推荐阅读
- 10个用于集中式日志记录的开源日志收集器
- Android数据存储
- Android开发数据持久化存储,sharePreference(偏好选择)的练习
- 谈谈Android Binder机制及AIDL使用
- Android studio——LinearLayout(线性布局)
- 入门实战资料《Android进阶解密》+《Android进阶之光》+《重构改善既有的代码第2版》电子资料学习
- 《Pro Spring Boot 2》第四章(Web Applications with Spring Boot)
- Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of
- Android 添加framework资源包