MongoDB权威入门简介

本文概述

  • 介绍
  • 安装MongoDB
  • 创建第一个集合
  • 将文档插入集合
  • 使用正则表达式过滤记录
  • MongoDB中的复杂查询
  • MongoDB的GUI
了解什么是MongoDB, 安装指南和基本操作。
MongoDB NoSQL的趋势比以往任何时候都大。你对此有必要的了解吗?
不用担心, 以下内容将为你提供帮助。
介绍 随着网站向动态内容的转变, 对No-SQL数据库的需求上升。这产生了许多No-SQL数据库, 例如MongoDB。
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数据库。
下面显示了一个示例命令行图像, 以使你对此有所了解。
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中执行查询。
当涉及复杂查询和大量数据时, 使用命令行可能会具有挑战性。为了使查看数据和执行查询更加容易, MongoDB为你提供了一个出色的GUI工具, 称为MongoDB Compass。
可从MongoDB下载站点轻松下载MongoDB指南针。下载并安装MongoDB Compass之后, 启动该应用程序, 并且类似下面所示的屏幕也会很受欢迎。
MongoDB权威入门简介

文章图片
考虑到你已启动并运行MongoDB服务器, 请单击带有默认详细信息的连接。你应该登录并显示可用数据库列表。
单击教程数据库以查看教程数据库中的集合列表。如下所示, 它显示了教程数据库中可用集合的列表。
MongoDB权威入门简介

文章图片
单击集合后, 它会显示文档列表, 其中包含必要的控件以使用JSON过滤记录, 并根据我们的方便性以JSON格式或表格格式查看文档。
GUI还使添加文档更加简单。你所需要做的就是在下面显示的屏幕中单击” 插入文档” 按钮。它会打开一个小对话框, 询问带有自动生成的文档ID的文档详细信息。
MongoDB权威入门简介

文章图片
GUI简化了许多使用MongoDB命令行界面可能难以执行的操作。
总结
我们通过各种示例和对安装的理解来理解NoSQL的本质, 与典型的关系数据库记录相比, 文档之间的区别是什么。你也可以从头开始在线学习此学习MongoDB的课程。
而且, 如果你是开发人员, 那么你可能对此感兴趣。

    推荐阅读