大数据学习栈记——MongoDB安装

发布于:2025-04-15 ⋅ 阅读:(19) ⋅ 点赞:(0)

本文介绍NoSQL技术:MongoDB的安装。操作系统:Ubuntu24.04

MongoDB介绍

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

MongoDB安装

Apt单节点安装

我们就用最简单的单节点模式安装

在mongodb官网上有完整的apt安装方法(英文版),认真读一下,对着操作就可以了。

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/

先查看我的ubuntu版本

cat /etc/lsb-release

发现是24.04,noble版本

(1)导入MongoDB公钥(Import the public key used by the package management system)

MongoDB是一个签名的包,因此我们需要添加其公钥以确保在安装过程中的数据完整性。

先安装gnupg和curl,执行下列代码:

gnupg:GNU Privacy Guard(GnuPG或GPG)是一种加密软件,它是PGP加密软件的满足GPL的替代物。

curl:cURL 是一个网络数据传输项目。

sudo apt-get install gnupg curl

导入MongoDB公共GPG秘钥,执行下列代码:

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor

(2)为mongodb创建文件列表(Create a list file for MongoDB)

注册mongodb源,添加MongoDB存储库,为mongodb创建文件列表,执行下列命令,注意这个命令是在一行。这句代码比较长,请敲完后仔细检查一下再回车执行。

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

(3)更新本地安装包文件(Reload local package database)

执行下列代码:

sudo apt-get update

(4)安装mongodb包(Install the MongoDB packages)

在安装时,可以安装mongdb最新版本,或者某一个指定版本。这里我安装最新版,执行下列代码;

sudo apt-get install -y mongodb-org

mongdb完成安装后,在shell中输入以下命令查看MongoDB版本:

mongod -version

显示安装的mongodb版本是8.0.6,和前面我们在网站上查询的最新版版本号一致

启动和关闭MongoDB

(1)启动mongod进程,执行下面命令:

sudo systemctl start mongod

(2)验证mongodb是否启动成功,执行下面命令:

sudo systemctl status mongod

状态显示是active:

(3)为了确保MongoDB在系统启动时自动启动,我们需要使其自启。使用以下命令设置MongoDB为自启动:

sudo systemctl enable mongod

(4)停止mongodb,执行下面命令:

sudo systemctl stop mongod

(5)重启mongodb,执行下面命令:

sudo systemctl restart mongod

使用MongoDB(shell模式)

我们借助mongosh命令来完成mongodb的相关管理工作。

参考:

https://www.cnblogs.com/wyy1234/p/10919567.html

https://blog.csdn.net/janyxe/article/details/125422873

https://blog.csdn.net/weixin_57367513/article/details/132582056

(1)进入mongosh

输入下列命令:

mongosh

输入命令

show dbs

这里,我们可以看到,系统安装成功以后,会自带三个库,分别是admin、config、local。

MongoDB和SQL中的概念对应关系:

(2)创建数据库

在mongosh中,我们使用命令use可以完成数据库的创建与切换(如果该数据库不存在会自动创建,已经存在的数据库则切换过去)。下面,我们创建一个名称为school的库。

use school

show collections命令可以查看数据库中的集合(即表),执行下列命令:

show collections

发现数据库school中默认没有任何表。

另外,如果使用 show dbs查看数据库,会发现没有显示school数据库。这是因为如果真的想把这个数据库创建成功,那么必须插入一个数据。

(3)创建集合

在MongoDB中,集合是自动创建的。当你向一个不存在的集合中插入文档时,MongoDB会自动创建这个集合。你也可以使用MongoDB提供的db.createCollection()方法来显式创建集合。例如,要创建名为teacher的集合,可以使用以下命令:

db.createCollection("teacher")

说明:

即使不建立这个集合,直接向集合中插入数据,这个集合也能被创建出来。

(4)新增数据

向MongoDB集合中新增记录非常简单,只需要使用集合对象的insertOne()或insertMany()方法即可。例如,要向名为teacher的集合中增加一条文档记录,可以使用以下命令:

db.teacher.insertOne({"name":"zhangsan","gender":"male"})

说明:

  • MongoDB是文档数据库,设计理念是将数据存储为一个文档,而不是存储在表中的行。MongoDB 中的文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都BSON 格式。BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。
  • db.teacher.insertOne({"name":"zhangsan","gender":"male"}) 这句代码有的教程中会写为db.teacher.insertOne({name:"zhangsan",gender:

"male"}),这样执行也不会出错。不过按照规范,JSON 键值对的 Key 要加引号,建议严格遵循JSON规范给key加引号。

  • MongoDB没有固定的模式,即同一集合中的文档结构模式与数据类型可以不同。例如下面新增teacher有name和age属性,前面范例新增的teacher有name和gender属性,两个不一样没有问题(当然很多时候也都用一样的属性)。
  • _id 类似于SQL中的主键,可以由开发者指定,也可以由MongoDB自动生成。如果插入文档时没有 _id 键,系统会自动创建。MongoDB中存储的文档必须有这个“_id”键。这个键的值可以是任意类型,默认是个ObjectId对象,每个文档有唯一的 _id ,确保集合中的每个文档都会被唯一标示。

如果要新增多个文档,可以使用insertMany()方法,例如:

db.student.insertMany([{"_id":1,"name":"Alice","age":20},{"_id":2,"name":"Bob","age":21},{"_id":3,"name":"Claus","age":19}])

说明:

  • 该范例以前并没有建立集合student,在新增文档数据时,MongdoDB发现没有集合student,就自动创建了该集合。
  • 这个范例中,手工指定了 _id 属性的值,必须保证  _id 的唯一性。

insert() 可插入单个或者多个数据(文档),等同于insertOne()+insertMany())与save()两个命令

mongoDB中插入数据有insert()与save()两个命令,二者的联系是:

  • 对于数据库中没有改字段,两者没有区别;
  • 对于数据库中有该字段,insert会报错,save会执行更新操作
  • 若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容。

例如,如果我们执行下列代码:

db.student.insert({"_id":3,"name":"Claus","age":20})

从上面看到发生了错误,因为这些字段已经有了,所以无法insert。

现在我们再来试试save()命令,执行代码:

db.student.save({"_id":3,"name":"Claus","age":20})

结果也出现了错误:

提示save is not a function,在网上查了一下,据说因为MongoDB的版本原因,有些命令已经不支持了,比如原来的db.集合名.save()就已经不能用了

https://blog.csdn.net/mez_Blog/article/details/131049563

(5)查询数据

db.集合名.find()来查看我们对应集合的内容,执行下面的代码:

db.student.find()

可以查看到student表中的所有数据

查询时可以传入查询条件,例如,查询name=Bob的记录,执行下列代码:

db.student.find({"name":"Bob"})

查询还有很多范例,如AND条件查询、OR条件查询等

(6)更新数据

update() 方法用于更新已存在的文档。语法格式如下:

db.collectionName.update(

<query>,

<update>,

{

upsert: <boolean>,

multi: <boolean>,

writeConcern: <document>

}

)

参数说明:

query:update的查询条件,类似sql update查询内where后面的。

update:update的对象和一些更新的操作符(如$,$inc..)等,也可以理解为sql update查询内set后面的

upsert:可选,这个参数的意思是,如果不存在update的记录,是否当新数据插入,true为插入,默认是false,不插入。

multi:可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern:可选,抛出异常的级别。

例如,执行代码更新一条数据:

db.student.update({"name":"Bob"},{$set:{"age":24}})

结果给出了以下提醒,说update()方法已经过时了,提醒我们可以使用updateOne、updateMany、bulkWrite这几个方法

我们把代码修改为:

db.student.updateOne({"name":"Bob"},{$set:{"age":24}})

看到已经更新成功

(7)删除记录

remove()函数是用来移除集合中的数据,语法格式如下:

db.collectionName.remove(

{

<query>,

justOne: <boolean>,

writeConcern: <document>

}

)

参数说明:

query:(可选)删除的文档的条件。

justOne:(可选)如果设为 true 或 1,则只删除一个文档。

writeConcern:(可选)抛出异常的级别。

例如,执行代码删除一条数据:

db.student.remove({"name":"Bob"})

同样,结果给出了以下提醒,说remove()方法已经过时了,提醒我们可以使用deleteOne、deleteMany、bulkWrite这几个方法

我们把代码修改为:

db.student.deleteOne({"name":"Bob"})

删除记录成功

(8)删除集合

集合删除语法格式是db.collection.drop(),例如我们删除student集合,执行下列代码:

db.student.drop()

删除后,查看该表内容,没有记录了

(9)删除数据库

集合删除语法格式是db.dropDatabase(),例如我们删除school数据库,执行下列代码:

db.dropDatabase()

删除后,查看该数据库,没有集合了

(10)退出Mongodb Shell模式

可以输入如下命令退出MongoDB Shell模式:

exit


网站公告

今日签到

点亮在社区的每一天
去签到