缓存与加速技术实践-MongoDB数据库应用

一.什么是MongoDB

   MongoDB 是一个文档型数据库,数据以类似 JSON 的文档形式存储。
   MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。
  MongoDB 使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。

  数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。

  集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。

  文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。

   MongoDB 将数据存储为一个文档,数据结构由键值 (key=>value) 对组成,文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组。

1.主要特点

  文档导向的存储:MongoDB 是一个面向文档的数据库,它以 JSON-like 的格式存储数据,使得数据结构更加灵活和丰富。

  索引优化查询:MongoDB 允许用户为文档中的任意属性创建索引,例如 FirstName 和 Address,从而提高查询效率和排序性能。

  数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB 实现了强大的数据冗余和扩展能力。

  水平扩展与分片:面对增加的负载,MongoDB 可以通过分片技术将数据分布到计算机网络中的其他节点上,实现水平扩展。

  强大的查询语言:MongoDB 使用 JSON 格式的查询语法,支持复杂的查询表达式,包括对内嵌对象和数组的查询。

  数据更新:利用 update () 命令,MongoDB 能够替换整个文档或更新指定的数据字段。

2.MongoDB概念解析

SQL 术语 / 概念MongoDB 术语 / 概念解释 / 说明
databasedatabase数据库
tablecollection数据库表 / 集合
rowdocument数据记录行 / 文档
columnfield数据字段 / 域
indexindex索引
table joins表连接,MongoDB 不支持
primary keyprimary key主键,MongoDB 自动将_id 字段设置为主键

二.MongoDB安装

安装前需要安装各个Linux平台依赖包

dnf -y install openssl libcurl

解压安装包

tar zxvf mongodb-linux-x86_64-rhel8-8.0.8.tgz 

将解压包拷贝到指定目录

 mv mongodb-linux-x86_64-rhel8-8.0.8.tgz /usr/local/mongodb

MongoDB的可执行文件在bin目录下

cd /usr/local/mongodb

cd bin/

vim /etc/profile

在末尾添加一行 : export /usr/local/mongodb/bin:$PATH

source /etc/profile

创建数据库目录

[root@localhost ~]#mkdir -p /var/lib/mongo
[root@localhost ~]#mkdir -p /var/log/mongodb

 由于mongodb依赖openssl11,需要编译安装openssl11

[root@localhost ~]# dnf install -y gcc make perl
[root@localhost ~]# tar xzf openssl-1.1.1w.tar.gz
[root@localhost ~]# cd openssl-1.1.1w
[root@sentinel01 openssl-1.1.1w]#./config --prefix=/opt/openssl11 --openssldir=/opt/openssl11/ssl
[root@sentinel01 openssl-1.1.1w]#make -j2
[root@sentinel01 openssl-1.1.1w]#make install

设置openssl11的环境变量

[root@localhost ~]# echo 'export LD_LIBRARY_PATH=/opt/openssl11/lib:$LD_LIBRARY_PATH' | sudo tee /etc/profile.d/openssl11.sh
[root@localhost ~]# source /etc/profile.d/openssl11.sh 

接下来启动Mongodb服务

 [root@localhost ~]# mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

 看到以下信息,说明启动成功

[root@localhost ~]# mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 12102
child process started successfully, parent exiting

 三.MongoDB Shell

    MongoDB Shell 是 MongoDB 提供的官方交互式界面,允许用户与 MongoDB 数据库进行交互、执行命令和操作数据库。

 1.安装MongoDB Shell

[root@localhost ~]# tar xzf mongosh-2.5.0-linux-x64-openssl3.tgz
[root@localhost ~]# cd mongosh-2.5.0-linux-x64-openssl3
[root@localhost mongosh-2.5.0-linux-x64-openssl3]# cd bin/
[root@localhost bin]# cp mongosh /usr/local/bin/
[root@localhost bin]# cp mongosh_crypt_v1.so /usr/local/lib/

2.验证MongoDB Shell

[root@localhsot bin]# mongosh
Current Mongosh Log ID: 680a15327aa1c07b1b26ff
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.0
Using MongoDB: 8.0.8
Using Mongosh: 2.5.0

For mongosh info see:

The server generated these startup warnings when booting
2025-04-24T18:22:54.368+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See Production Notes for Self-Managed Deployments - Database Manual - MongoDB Docs
2025-04-24T18:22:55.892+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2025-04-24T18:22:55.892+08:00: You are running this process as the root user, which is not recommended

2025-04-24T18:22:55.892+08:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip <address> to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
2025-04-24T18:22:55.892+08:00: Soft rlimits for open file descriptors too low
2025-04-24T18:22:55.892+08:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile
2025-04-24T18:22:55.892+08:00: We suggest setting the contents of sysfsFile to 0.
2025-04-24T18:22:55.892+08:00: We suggest setting swappiness to 0 or 1, as swapping can cause performance problems.

test>

四.数据库管理

 1.查看数据库列表

     要查看当前MongoDB实例中所有数据库的列表,可以用show dbs命令

>show dbs

   要查看当前正在使用的数据库,可以用db命令

>db

2.创建数据库

test> use runoob
switched to db runoob
runoob> db
runoob
runoob>

runoob> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
runoob> 

插入一条命令会显示你创建的列表 

runoob> db.runoob.insertOne({"name":"zhangsan"})
{
acknowledged: true,
insertedId: ObjectId('680a18f4277aa1c07b1b2700')
}
runoob> show dbs
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
runoob 40.00 KiB
runoob> 

 3.删除数据库

如果你要删除数据库,可以使用db.dropDatabase()

runoob>use test

test>db.dropDatabase()

4. 默认数据库

   MongoDB 中默认的数据库为 test,如果您没有创建新的数据库,数据将存放在 test 数据库中。

   当您通过 shell 连接到 MongoDB 实例时,如果未使用 use 命令切换到其他数据库,则会默认使用 test 数据库。

   例如,在启动 MongoDB 实例并连接到 MongoDB shell 后,如果您开始插入文档而未显式指定数据库,MongoDB 将默认使用 test 数据库。

5. 系统内置数据库

   在 MongoDB 中,admin、config 和 local 是三个特殊的系统内置数据库

admin 数据库:存储所有数据库的用户身份信息和全局权限(如 root 用户)。用户必须通过        admin 数据库认证后才能执行跨库管理操作。
config 数据库:仅在分片集群环境中存在。存储分片信息、块(chunk)分布、集合分片策略等关键元数据。
    local 数据库:存储当前节点的副本集状态、操作日志(oplog)等本地数据。数据不会被复制到其他节点,仅存在于当前实例。

五.集合管理

1.查看集合

查看当前库已有集合,可以使用show collections命令

 >show collections

2.创建集合 

db.createCollection("myComplexCollection", {capped: true,size: 10485760,max: 5000,validator: { $jsonSchema: {bsonType: "object",required: ["name", "email"],properties: {name: {bsonType: "string",description: "必须为字符串且为必填项"},email: {bsonType: "string",pattern: ".*@.*$",description: "必须为有效的电子邮件地址"}}}},validationLevel: "strict",validationAction: "error",storageEngine: {wiredTiger: { configString: "block_compressor=zstd" }},collation: { locale: "en", strength: 2 }
});
> use test
switched to db test
> db.createCollection("runoob")
{ "ok" : 1 }

 3.更新集合名

db.adminCommand({renameCollection: "test.oldCollection",to: "test.newCollection"
});
db.adminCommand({renameCollection: "test.oldCollection",to: "production.newCollection"
});

 

 4.删除集合

>db.kgc.drop()

六.文档操作

1.插入文档

当个文档插入:insertOne()

db.myCollection.insertOne({name: "Alice",age: 25,city: "New York"
});{"acknowledged": true,"insertedId": ObjectId("60c72b2f9b1d8b5a5f8e2b2d")
}

 2.insertMany()

db.myCollection.insertMany([{ name: "Bob", age: 30, city: "Los Angeles" },{ name: "Charlie", age: 35, city: "Chicago" }]);返回结果:
{"acknowledged": true,"insertedIds": [ObjectId("60c72b2f9b1d8b5a5f8e2b2e"),ObjectId("60c72b2f9b1d8b5a5f8e2b2f")]
}

 2.查询文档

查找所有文档

>db.myCollection.find();

 查找当个文档

>db.myCollection.findOne({name:"bob"});

3.删除文档

deleteOne()方法用于删除匹配过滤器的单个文档

>db.myCollection.deleteOne({name:"bob"});

deleteMany()方法用于删除所有匹配过滤器的文档

> db.myCollection.deleteMany({name:"Alice"})

4.更新文档

插入测试数据

>db.myCollection.insertMany([{ name: "Alice",age: 25,city: "Los Angeles",statu
s: "inactive" },{ name: "Bob",age: 30,city: "Los Angeles",status: "active" },
{ name: "Charlie",age: 35,city: "Chicago",status: "active"}]);

 1.updateOne()用于更新单个文档

>db.myCollection.updateOne({ name: "Alice" },                     // 过滤条件{ $set: { age: 26 } },                // 更新操作{ upsert: false }                     // 可选参数
);

2.updateMany()用于匹配所有文档 

db.myCollection.updateMany({ age: { $lt: 30 } },                // 过滤条件{ $set: { status: "active" } },     // 更新操作{ upsert: false }                    // 可选参数
);

 七.MongoDB备份与恢复

  1.安装备份与恢复命令

[root@localhost ~]#rpm -ivh mongodb-database-tools-rhel70-x86_64-100.12.0.rpm

  2.MongoDB数据备份 

[root@localhost ~]# mongodump
2025-04-25T22:44:21.307+0800    writing admin.system.version to dump/admin/system.version.bson
2025-04-25T22:44:21.307+0800    done dumping admin.system.version (1 document)
2025-04-25T22:44:21.308+0800    writing mydb.myCollection to dump/mydb/myCollection.bson
2025-04-25T22:44:21.308+0800    writing test.myComplexCollection to dump/test/myComplexCollection.bson
2025-04-25T22:44:21.310+0800    writing test.myCollection to dump/test/myCollection.bson
2025-04-25T22:44:21.313+0800    done dumping test.myCollection (3 documents)
2025-04-25T22:44:21.313+0800    done dumping test.myComplexCollection (0 documents)
2025-04-25T22:44:21.334+0800    done dumping mydb.myCollection (3 documents)
[root@localhost ~]# ls
dump

  3. MongoDB数据恢复

[root@localhost ~]# mongorestore
2025-04-25T22:50:28.111+0800    using default 'dump' directory
2025-04-25T22:50:28.111+0800    preparing collections to restore from
2025-04-25T22:50:28.111+0800    don't know what to do with file "dump/prelude.json", skipping...
2025-04-25T22:50:28.111+0800    reading metadata for mydb.myCollection from dump/mydb/myCollection.metadata.json
2025-04-25T22:50:28.111+0800    reading metadata for test.myCollection from dump/test/myCollection.metadata.json
2025-04-25T22:50:28.111+0800    reading metadata for test.myComplexCollection from dump/test/myComplexCollection.metadata.json
2025-04-25T22:50:28.125+0800    restoring test.myCollection from dump/test/myCollection.bson
2025-04-25T22:50:28.134+0800    restoring mydb.myCollection from dump/mydb/myCollection.bson
2025-04-25T22:50:28.136+0800    finished restoring test.myCollection (3 documents, 0 failures)
2025-04-25T22:50:28.140+0800    restoring test.myComplexCollection from dump/test/myComplexCollection.bson
2025-04-25T22:50:28.144+0800    finished restoring mydb.myCollection (3 documents, 0 failures)
2025-04-25T22:50:28.151+0800    finished restoring test.myComplexCollection (0 documents, 0 failures)
2025-04-25T22:50:28.151+0800    no indexes to restore for collection mydb.myCollection
2025-04-25T22:50:28.151+0800    no indexes to restore for collection test.myCollection
2025-04-25T22:50:28.151+0800    no indexes to restore for collection test.myComplexCollection
2025-04-25T22:50:28.151+0800    6 document(s) restored successfully. 0 document(s) failed to restore.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86495.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

声网对话式AI把“答疑机器人”变成“有思维的助教”

作为一家专注初高中学生的线上教育平台&#xff0c;我们精心打磨的系统化课程收获了不少认可&#xff0c;但课后无人答疑的难题却始终横亘在前。学生课后遇到疑惑&#xff0c;要么只能默默憋在心里&#xff0c;要么就得苦苦等待下一节课&#xff0c;家长们也频繁抱怨 “花了钱&…

常见的排序方法

目录 1. 插入排序 2. 希尔排序 3. 选择排序 4. 堆排序 5. 冒泡排序 6. 快速排序 1. 快速排序的实现 1. 思路&#xff08;以从小到大排序为例&#xff09; 2. 选取基准元素的方法&#xff08;Hoare&#xff09; 3. 选取基准元素的方法&#xff08;挖坑法&#xff09; …

【matlab定位例程】基于AOA和TDOA混合的定位方法,背景为三维空间,自适应锚点数量,附下载链接

文章目录 代码概述代码功能概述核心算法原理AOA定位模型TDOA定位迭代算法混合定位策略关键技术创新 运行结果4个锚点的情况40个锚点的情况 MATLAB源代码 代码概述 代码功能概述 本代码实现了一种三维空间中的混合定位算法&#xff0c;结合到达角&#xff08; A O A AOA AOA&a…

专题:2025医疗AI应用研究报告|附200+份报告PDF汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42748 本报告汇总解读聚焦医疗行业人工智能应用的前沿动态与市场机遇&#xff0c;以数据驱动视角剖析技术演进与商业落地的关键路径。从GenAI在医疗领域的爆发式增长&#xff0c;到细分场景的成熟度矩阵&#xff0c;再到运营成本压力…

推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)

XHan Admin 简介 &#x1f389;&#x1f389; XHan Admin 是一个开箱即用的开源中后台管理系统基础解决方案&#xff0c; 项目为前后端分离架构。采用最新的技术栈全新构建&#xff0c;纯净的项目代码&#xff0c;没有历史包袱。 前端使用最新发布的 vite7.0 版本构建&#xf…

MySQL误删数据急救指南:基于Binlog日志的实战恢复详解

背景 数据误删是一个比较严重的场景 1.典型误操作场景 场景1&#xff1a;DELETE FROM orders WHERE status0 → 漏写AND create_time>‘2025-06-20’ 场景2&#xff1a;DROP TABLE customer → 误执行于生产环境 认识 binlog 1.binlog 的核心作用 记录所有 DDL/DML 操…

高效数据采集方案:快速部署与应用 AnyCrawl 网页爬虫工具实操指南

以下是对 AnyCrawl 的简单介绍&#xff1a; AnyCrawl 提供高性能网页数据爬取&#xff0c;其功能专为 LLM 集成和数据处理而设计支持利用搜索引擎直接查询获取结果内容&#xff0c;类似 searxng提供开发者友好的API&#xff0c;支持动态内容抓取&#xff0c;并输出结构化数据&…

vue3可以分页、搜索的select

下载 npm i v-selectpage基本使用 import { SelectPageList } from v-selectpage;<SelectPageListlanguage"zh-chs"key-prop"id"label-prop"name"fetch-data"fetchData" />const fetchData (data,callback) > {const { sea…

C# 入门学习教程 (一)

文章目录 一、解决方案与项目1. Solution 与 project 二、类与名称空间1.类与名称空间2.类库的引用1. DLL引用&#xff08;黑盒引用&#xff0c;无源代码&#xff09;2. Nuget 引用3. 项目引用&#xff08;白盒引用&#xff0c;有源代码&#xff09; 3.依赖关系 三、类&#xf…

76、单元测试-参数化测试

76、单元测试-参数化测试 参数化测试是一种单元测试技术&#xff0c;通过将测试数据与测试逻辑分离&#xff0c;使用不同的输入参数多次运行相同的测试用例&#xff0c;从而提高测试效率和代码复用性。 #### 基本原理 - **数据驱动测试**&#xff1a;将测试数据参数化&#xf…

SQL学习笔记3

SQL常用函数 1、字符串函数 函数调用的语法&#xff1a;select 函数&#xff08;参数); 常用的字符串函数有&#xff1a; 拼接字符串&#xff0c;将几个字符串拼到一起&#xff1a;concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…

Golang 面向对象编程,如何实现 封装、继承、多态

Go语言虽然不是纯粹的面向对象语言&#xff0c;但它通过结构体(struct)、接口(interface)和方法(method)提供了面向对象编程的能力。下面我将通过具体示例展示Go中如何实现类、封装、继承、多态以及构造函数等概念。 1. 类与封装 在Go中&#xff0c;使用结构体(struct)来定义…

为什么android要使用Binder机制

1.linux中大多数标准 IPC 场景&#xff08;如管道、消息队列、ioctl 等&#xff09;的进程间通信机制 ------------------ ------------------ ------------------ | 用户进程 A | | 内核空间 | | 用户进程 B | | (User Spa…

OpenCV CUDA模块设备层-----双曲余弦函数cosh()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于计算四维浮点向量&#xff08;float4类型&#xff09;的双曲余弦值&#xff0c;作用于CUDA设备端。双曲余弦函数定义为cosh(x) (eˣ …

48页PPT | 企业数字化转型关键方法论:实践路径、案例和落地评估框架

目录 一、什么是企业数据化转型&#xff1f; 二、为什么要进行数据化转型&#xff1f; 1. 市场复杂性与不确定性上升 2. 内部流程效率与协同难题突出 3. 数字资产沉淀不足&#xff0c;智能化基础薄弱 三、数据化流程管理&#xff1a;从“业务流程”到“数据流程”的对齐 …

VTK中的形态学处理

VTK图像处理代码解析:阈值化与形态学开闭运算 这段代码展示了使用VTK进行医学图像处理的两个关键步骤:阈值分割和形态学开闭运算。下面我将详细解析每个部分的功能和实现原理。 处理前 处理后 1. 阈值分割部分 (vtkImageThreshold) vtkSmartPointer<vtkImageThresho…

xlsx.utils.sheet_to_json() 方法详解

sheet_to_json() 是 SheetJS/xlsx 库中最常用的方法之一&#xff0c;用于将 Excel 工作表&#xff08;Worksheet&#xff09;转换为 JSON 格式数据。下面我将全面讲解它的用法、参数配置和实际应用场景。 基本语法 javascript 复制 下载 const jsonData XLSX.utils.sheet…

〔从零搭建〕BI可视化平台部署指南

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xf…

合规型区块链RWA系统解决方案报告——机构资产数字化的终极武器

&#xff08;跨境金融科技解决方案白皮书&#xff09; 一、直击机构客户四大痛点 痛点传统方案缺陷我们的破局点✖️ 跨境资产流动性差结算周期30天&#xff0c;摩擦成本超8%▶️ 724h全球实时交易&#xff08;速度提升90%&#xff09;✖️ 合规成本飙升KYC/AML人工审核占成本…

探索阿里云容器:解锁云原生应用的无限可能

引言&#xff1a;容器时代的开启 在数字化浪潮汹涌澎湃的当下&#xff0c;云计算已成为企业创新与发展的关键驱动力。从早期的基础设施即服务&#xff08;IaaS&#xff09;&#xff0c;到如今蓬勃发展的平台即服务&#xff08;PaaS&#xff09;和软件即服务&#xff08;SaaS&a…