MongoDB 数据库管理系统

MongoDB是一个非关系型数据库管理系统,它使用文档模型存储数据。MongoDB中的文档类似于JSON对象,可以包含键值对和嵌套文档。MongoDB提供了强大的查询语言、聚合框架、索引和直接在数据存储中运行的计算。

MongoDB被广泛应用于许多领域,特别是Web应用程序和大数据领域。它具有高度可扩展性和灵活性,可以处理多种数据类型。此外,MongoDB还提供了一系列工具和库,以方便开发人员在应用程序中使用它。

MongoDB可以存储Web内容管理系统的重要数据,例如页面和文章内容、标签等,以及和用户相关的数据。

安装

执行以下命令添加 MongoDB 的官方仓库:

vim /etc/yum.repos.d/mongodb-org-4.4.repo
在文件中添加以下内容
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

保存并退出。

安装 MongoDB:

  

[root@localhost ~]# yum install mongodb-org -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.bfsu.edu.cn
 * updates: mirrors.bfsu.edu.cn

配置 MongoDB

打开 MongoDB 的配置文件:

sudo vi m/etc/mongod.conf

 

- `bindIp`:绑定的 IP 地址。默认为 `127.0.0.1`,即本地访问,如果需要远程访问需要将其改为 `0.0.0.0`。

- `port`:端口号。默认为 `27017`,根据实际需要修改。

保存退出

执行以下命令启动 MongoDB

 systemctl start mongod

执行以下命令将 MongoDB 设置为系统服务:

[root@localhost ~]#  systemctl enable mongod

可以使用以下命令检查服务的状态:

sudo systemctl status mongod

 使用以下命令登录 MongoDB

[root@localhost ~]# mongo
MongoDB shell version v4.4.22
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3034ffa1-9092-494c-8749-e03d15836666") }
MongoDB server version: 4.4.22
---
The server generated these startup warnings when booting: 
        2023-06-13T14:25:22.535+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2023-06-13T14:25:22.535+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2023-06-13T14:25:22.535+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
> 

命令

可以使用以下命令检查 MongoDB 的版本:
如果成功安装 MongoDB,则应该输出 MongoDB 的版本号
> db.version()
4.4.22
进入admin数据库:
use admin
> use admin
switched to db admin
创建管理员用户
> db.createUser({ user: "admin", pwd: "123.com", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
uncaught exception: Error: couldn't add user: User "admin@admin" already exists :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1386:11
@(shell):1:1

其中,`user` 和 `pwd` 分别是要创建的用户的用户名和密码。`roles` 是一个数组,用于指定该用户在哪些数据库中拥有哪些角色。每个角色都由一个 `role` 字段和一个 `db` 字段组成,分别表示角色名称和所属的数据库名称。

exit退出

重启
[root@localhost ~]#  systemctl stop mongod
[root@localhost ~]#  systemctl start mongod
[root@localhost ~]# 

再次使用mongo shell登录到MongoDB,使用以下命令验证登录

[root@localhost ~]# mongo -u admin -p 123.com --authenticationDatabase admin
MongoDB shell version v4.4.22
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b1abfdf6-fdce-4b19-965c-5d7b29293553") }
MongoDB server version: 4.4.22
---
The server generated these startup warnings when booting: 
        2023-06-13T18:16:57.509+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2023-06-13T18:16:57.509+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2023-06-13T18:16:57.509+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---

 显示所有数据库的列表

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

选择要使用的数据库。如果该数据库不存在,则会创建一个新数据库

> use local
switched to db local

 在指定集合中插入一个新文档

> db.local.insertOne( { name: "John", age: 30, city: "New York" } )

{

"acknowledged" : true,

"insertedId" : ObjectId("648842bebea94c1f1f347dad")

}

更新指定集合中的一个文档

> db.local.updateOne(
    { name: "John" },
    { $set: { city: "San Francisco" } }
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

删除指定集合中的一个文档

> db.local.deleteOne( { name: "John" } )
{ "acknowledged" : true, "deletedCount" : 1 }

创建

> use local  
switched to db local

返回查看指定集合中文档的数量

> db.local.count()
0

创建用户数据库

> use testdb

db.createUser({
  user: "testuser",
   pwd: "123.com",
   roles: [
    { role: "readWrite", db: "testdb" }
   ]
 })
Successfully added user: {
	"user" : "testuser",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "testdb"
		}
	]
}

删除当前使用的数据库

db.dropDatabase()

获取当前使用的数据库的状态信息

 db.stats()


> db.stats()
{
	"db" : "testdb",
	"collections" : 0,
	"views" : 0,
	"objects" : 0,
	"avgObjSize" : 0,
	"dataSize" : 0,
	"storageSize" : 0,
	"totalSize" : 0,
	"indexes" : 0,
	"indexSize" : 0,
	"scaleFactor" : 1,
	"fileSize" : 0,
	"fsUsedSize" : 0,
	"fsTotalSize" : 0,
	"ok" : 1
}

热备份

热备份是在MongoDB处于运行状态下进行备份的一种方式。具体步骤如下

[root@localhost ~]# mongodump --out /data/backup
2023-06-13T18:34:45.382+0800	writing admin.system.users to /data/backup/admin/system.users.bson
2023-06-13T18:34:45.383+0800	done dumping admin.system.users (2 documents)
2023-06-13T18:34:45.384+0800	writing admin.system.version to /data/backup/admin/system.version.bson
2023-06-13T18:34:45.384+0800	done dumping admin.system.version (2 documents)

如果需要对导出的备份数据进行压缩,可以使用以下命令

[root@localhost ~]# tar -czvf backup.tar.gz /data/backup
tar: 从成员名中删除开头的“/”
/data/backup/
/data/backup/admin/
/data/backup/admin/system.users.metadata.json
/data/backup/admin/system.version.metadata.json
/data/backup/admin/system.users.bson
/data/backup/admin/system.version.bson

启动MongoDB服务

[root@localhost ~]#  systemctl start mongod

MongoDB使用mongorestore命令将备份数据还原到MongoDB中。以下是MongoDB备份数据还原的步骤:

需要解压缩MongoDB备份文件。假设备份文件`backup.tar.gz`被解压到了`/data/backup`目录,使用以下命令解压备份文件

[root@localhost ~]# tar -xzvf backup.tar.gz -C /data/backup
data/backup/
data/backup/admin/
data/backup/admin/system.users.metadata.json
data/backup/admin/system.version.metadata.json
data/backup/admin/system.users.bson
data/backup/admin/system.version.bson

使用mongorestore命令将备份数据还原到MongoDB中。以下命令将备份数据恢复到MongoDB

[root@localhost ~]# mongorestore --db mydb /data/backup/
2023-06-13T19:15:56.536+0800	The --db and --collection flags ae deprecated for this use-case; please use --nsInclude instead, ie. with --nsInclude=${DATABASE}.${COLLECTION}
2023-06-13T19:15:56.536+0800	building a list of collections torestore from /data/backup dir
2023-06-13T19:15:56.536+0800	don't know what to do with subdirctory "backup/admin", skipping...
2023-06-13T19:15:56.536+0800	don't know what to do with subdirctory "backup/data", skipping...
2023-06-13T19:15:56.536+0800	0 document(s) restored successfuly. 0 document(s) failed to 

restore.还原备份数据后,重启MongoDB服务

 systemctl start mongod

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您简单介绍一下如何利用RESTful API实现图书管理系统的例子。 首先,我们需要设计API的接口,包括以下几个基本操作: 1. 获取所有图书信息 GET /books 2. 获取某一本图书信息 GET /books/:id 3. 添加一本图书 POST /books 4. 修改某一本图书 PUT /books/:id 5. 删除某一本图书 DELETE /books/:id 接下来,我们需要确定数据的存储方式,这里我们可以使用MongoDB数据库来存储图书信息。 然后,我们可以使用Node.js和Express框架来搭建API服务,如下所示: ``` const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const app = express(); // 连接MongoDB数据库 mongoose.connect('mongodb://localhost/bookstore', { useNewUrlParser: true }); // 定义图书模型 const Book = mongoose.model('Book', { title: String, author: String, description: String, price: Number }); // 解析请求体 app.use(bodyParser.json()); // 获取所有图书信息 app.get('/books', async (req, res) => { const books = await Book.find(); res.send(books); }); // 获取某一本图书信息 app.get('/books/:id', async (req, res) => { const book = await Book.findById(req.params.id); res.send(book); }); // 添加一本图书 app.post('/books', async (req, res) => { const book = new Book(req.body); await book.save(); res.send(book); }); // 修改某一本图书 app.put('/books/:id', async (req, res) => { const book = await Book.findByIdAndUpdate(req.params.id, req.body, { new: true }); res.send(book); }); // 删除某一本图书 app.delete('/books/:id', async (req, res) => { await Book.findByIdAndDelete(req.params.id); res.send('Book deleted successfully!'); }); // 启动API服务 app.listen(3000, () => { console.log('Server started on port 3000!'); }); ``` 最后,我们可以使用Postman等工具进行API测试,完成图书管理系统的实现。 希望这个例子能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值