个性化阅读
专注于IT技术分析

MongoDB权威入门简介

本文概述

了解什么是MongoDB, 安装指南和基本操作。

MongoDB NoSQL的趋势比以往任何时候都大。你对此有必要的了解吗?

不用担心, 以下内容将为你提供帮助。

介绍

随着网站向动态内容的转变, 对No-SQL数据库的需求上升。这产生了许多No-SQL数据库, 例如MongoDB。

MongoDB权威入门简介2

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权威入门简介4
  • 要创建一个集合, 执行以下命令:
$ > 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()函数可以轻松地基于特定参数来过滤文档。让我们使用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权威入门简介8

单击集合后, 它会显示文档列表, 其中包含必要的控件以使用JSON过滤记录, 并根据我们的方便性以JSON格式或表格格式查看文档。

GUI还使添加文档更加简单。你所需要做的就是在下面显示的屏幕中单击”插入文档”按钮。它会打开一个小对话框, 询问带有自动生成的文档ID的文档详细信息。

MongoDB文件

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

总结

我们通过各种示例和对安装的理解来理解NoSQL的本质, 与典型的关系数据库记录相比, 文档之间的区别是什么。你也可以从头开始在线学习此学习MongoDB的课程。

而且, 如果你是开发人员, 那么你可能对此感兴趣。

赞(4)
未经允许不得转载:srcmini » MongoDB权威入门简介

评论 抢沙发

评论前必须登录!