非关系型数据库(1)---MongoDB

news2024/11/14 1:13:48

目录

1.MongoDB

1.MongoDB的特点

2.MongoDB的应用场景

3.MongoDB与MySQL的比较

2.数据库操作

1. 创建数据库

2. 切换数据库

3. 查看所有数据库

4. 查看当前数据库

5. 删除数据库

6. 查看数据库统计信息

7. 备份数据库

8. 恢复数据库

9. 创建用户和授权

10. 删除用户

11. 查看用户列表

3.集合和文档操作

1. 创建集合

2. 删除集合

3. 重命名集合

4. 查看所有集合

5. 插入文档

6. 查询文档

7. 更新文档

8. 删除文档

9. 创建索引

10. 删除索引

11. 查看索引

12. 计数文档

13. distinct操作

14. aggregate聚合

15. findAndModify

16. bulkWrite

4.查询操作

基本查询操作

条件查询操作

聚合查询操作

高级查询技巧

 5.SpringBoot集成MongoDB


1.MongoDB

        MongoDB是一个基于文档的NoSQL数据库,它使用JSON-like的BSON格式来存储数据。MongoDB的设计旨在提供高性能、高可用性和易于扩展的特点,特别适合处理大量数据和高并发的数据访问需求。

1.MongoDB的特点

  • 文档存储:数据存储在类似JSON的文档中,每个文档都可以有不同的字段和结构。
  • 动态模式:不需要预先定义数据结构,可以根据需要动态添加字段。
  • 高可用性:支持自动故障转移和复制集,确保数据的持久性和可用性。
  • 水平扩展:通过分片技术,可以在多个服务器上分布数据,实现水平扩展。
  • 丰富的查询语言:支持丰富的查询操作,包括聚合、索引、文本搜索等。

2.MongoDB的应用场景

  • 大数据处理:适合处理大规模数据集,如日志分析、实时数据监控等。
  • 实时应用:适用于需要快速读写操作的应用,如社交网络、实时聊天应用等。
  • 内容管理:适合存储和检索非结构化数据,如博客、文章、媒体内容等。
  • 物联网(IoT):处理来自大量设备的传感器数据。

3.MongoDB与MySQL的比较

  • 数据模型:MySQL使用关系型数据模型,而MongoDB使用文档型数据模型。
  • 查询语言:MySQL使用SQL,而MongoDB使用自己的查询语言。
  • 扩展性:MongoDB支持水平扩展,而MySQL更适合垂直扩展。
  • 事务处理:MySQL支持复杂的事务处理,而MongoDB在4.0版本后开始支持多文档事务。

2.数据库操作

MongoDB对数据库本身的操作

        在MongoDB中,对数据库本身的操作包括创建数据库、切换数据库、删除数据库以及查看数据库信息等。以下是一些常用的命令行操作:

1. 创建数据库

        在MongoDB中,数据库是通过使用use命令切换到不存在的数据库来创建的。当你第一次存储数据时,数据库和集合会被自动创建。

use newDatabaseName

2. 切换数据库

        使用use命令可以切换到已经存在的数据库。如果数据库不存在,则会创建一个新的数据库。

use existingDatabaseName

3. 查看所有数据库

        使用show dbs命令可以查看当前MongoDB实例中的所有数据库。

show dbs

4. 查看当前数据库

        使用db命令可以查看当前操作的数据库。

db

5. 删除数据库

        使用db.dropDatabase()命令可以删除当前数据库。这个操作会删除数据库中的所有集合、文档和索引。

db.dropDatabase()

6. 查看数据库统计信息

        使用db.stats()命令可以查看当前数据库的统计信息,例如数据大小、索引大小、文档数量等。

db.stats()

7. 备份数据库

        使用mongodump工具可以备份MongoDB数据库。以下是一个基本的备份命令:

mongodump --db databaseName --out backupDirectory

8. 恢复数据库

        使用mongorestore工具可以恢复MongoDB数据库。以下是一个基本的恢复命令:

mongorestore --db databaseName backupDirectory

9. 创建用户和授权

        在MongoDB中,你可以创建用户并对数据库进行授权。以下是一些基本的用户和权限管理命令:

use admin
db.createUser({
  user: "username",
  pwd: "password",
  roles: [{ role: "readWrite", db: "databaseName" }]
})

10. 删除用户

        使用db.dropUser()命令可以删除数据库中的用户。

db.dropUser("username")

11. 查看用户列表

        使用show users命令可以查看当前数据库中的用户列表。

show users

3.集合和文档操作

1. 创建集合

        使用db.createCollection()命令可以显式创建一个集合。

db.createCollection("collectionName")

2. 删除集合

        使用db.collection.drop()命令可以删除一个集合及其所有文档。

db.collectionName.drop()

3. 重命名集合

        使用db.collection.renameCollection()命令可以重命名一个集合。

db.collectionName.renameCollection("newCollectionName")

4. 查看所有集合

        使用show collectionsdb.getCollectionNames()命令可以查看当前数据库中的所有集合。

show collections

        或

db.getCollectionNames()

5. 插入文档

        使用db.collection.insert()命令可以在集合中插入一个或多个文档。

db.collectionName.insert({key: "value"})

6. 查询文档

        使用db.collection.find()命令可以查询集合中的文档。

db.collectionName.find({key: "value"})

7. 更新文档

        使用db.collection.update()命令可以更新集合中的文档。

db.collectionName.update({key: "value"}, {$set: {key: "newValue"}})

8. 删除文档

        使用db.collection.remove()命令可以删除集合中的文档。

db.collectionName.remove({key: "value"})

9. 创建索引

        使用db.collection.createIndex()命令可以为集合创建索引。

db.collectionName.createIndex({key: 1})

10. 删除索引

        使用db.collection.dropIndex()命令可以删除集合中的索引。

db.collectionName.dropIndex({key: 1})

11. 查看索引

        使用db.collection.getIndexes()命令可以查看集合中的所有索引。

db.collectionName.getIndexes()

12. 计数文档

        使用db.collection.count()命令可以计算集合中的文档数量。

db.collectionName.count()

13. distinct操作

        使用db.collection.distinct()命令可以返回集合中指定键的不同值。

db.collectionName.distinct("key")

14. aggregate聚合

        使用db.collection.aggregate()命令可以进行复杂的聚合操作。

db.collectionName.aggregate([{$match: {key: "value"}}, {$group: {_id: "$key", count: {$sum: 1}} }])

15. findAndModify

        使用db.collection.findAndModify()命令可以原子性地查找并修改文档。

db.collectionName.findAndModify({
  query: {key: "value"},
  update: {$set: {key: "newValue"}},
  new: true
})

16. bulkWrite

        使用db.collection.bulkWrite()命令可以执行批量写入操作,包括插入、更新和删除。

db.collectionName.bulkWrite([
  {insertOne: {document: {key: "value"}}},
  {updateOne: {filter: {key: "value"}, update: {$set: {key: "newValue"}}, upsert: true}},
  {deleteOne: {filter: {key: "value"}}}
])

4.查询操作

  1. 基本查询操作

    • 查找所有文档:使用find()方法可以查找集合中的所有文档。例如,db.collection.find()
    • 查找特定文档:通过在find()方法中指定查询条件,可以查找满足条件的特定文档。例如,db.collection.find({ field: "value" })
    • 返回特定字段:可以使用投影(projection)来指定返回的字段。例如,db.collection.find({ field: "value" }, { field1: 1, field2: 1 })
  2. 条件查询操作

    • 比较操作符:如$eq(等于)、$ne(不等于)、$gt(大于)等。例如,db.collection.find({ field: {$gt: 10 } })
    • 逻辑操作符:包括$and$or$not$nor。例如,db.collection.find({ $or: [{ field1: "value1" }, { field2: "value2" }] })
    • 元素操作符:如$exists$type,用于查询包含特定字段或类型的文档。例如,db.collection.find({ field: { $exists: true } })
    • 数组操作符:如$in$nin$all,用于查询数组字段。例如,db.collection.find({ arrayField: {$in: [1, 2, 3] } })
    • 正则表达式:用于模糊查询。例如,db.collection.find({ field: { $regex: "pattern" } })
  3. 聚合查询操作

    • 基本聚合管道:聚合管道由多个阶段组成,每个阶段对数据进行处理。例如,db.collection.aggregate([ { $match: { field: "value" } }, {$group: { _id: "$field", total: {$sum: "$anotherField" } } } ])
    • 常用聚合操作符:如$match$group$project$sort$limit$skip等。
    • 聚合表达式:如$sum$avg$min$max等,用于在聚合阶段进行计算。
  4. 高级查询技巧

    • 使用索引:合理使用索引可以显著提高查询性能。
    • 查询优化:使用explain()方法分析查询性能。
    • 分页查询:使用limit()skip()方法进行分页查询。
    • 地理空间查询:使用地理空间索引和操作符进行地理位置查询

 5.SpringBoot集成MongoDB

  1. 保存操作

    • save(T entity):保存单个实体。
    • saveAll(Iterable<T> entities):保存多个实体。
  2. 查找操作

    • findById(ID id):根据ID查找实体。
    • findById(ID id, Class<T> type):根据ID查找实体,并指定返回类型。
    • findAll():查找所有实体。
    • findAll(Iterable<ID> ids):根据ID列表查找多个实体。
    • findAll(Sort sort):查找所有实体并排序。
    • findAll(Example<T> example):根据示例查找实体。
    • findAll(Example<T> example, Sort sort):根据示例查找实体并排序。
  3. 删除操作

    • deleteById(ID id):根据ID删除实体。
    • delete(T entity):删除单个实体。
    • deleteAll(Iterable<? extends T> entities):删除多个实体。
    • deleteAll():删除所有实体。
  4. 更新操作

    • save(T entity):保存或更新实体(如果实体已存在,则更新;如果不存在,则保存)。
  5. 计数操作

    • count():计算所有实体的数量。
    • count(Example<T> example):根据示例计算实体的数量。
  6. 存在性检查

    • existsById(ID id):检查ID对应的实体是否存在。
  7. 自定义查询

    • 可以通过在MongoRepository接口中定义方法并使用MongoDB的查询注解(如@Query)来执行自定义查询。
  8. 分页和排序

    • findAll(Pageable pageable):分页查询所有实体。
    • findAll(Sort sort):排序查询所有实体。
  9. 聚合操作

    • 使用Aggregation类来执行复杂的聚合操作,如分组、过滤、转换等。
  10. 地理空间操作

    • 如果实体包含地理空间数据,可以使用地理空间查询方法,如nearwithin等。
  11. 事务管理

    • 使用@Transactional注解来管理事务。
  12. 索引管理

    • 使用@Indexed注解来定义索引。

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

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

相关文章

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举&#xff0c;这个选举是借助于zookeeper的独享锁实现的&#xff0c;先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息&#xff0c;谁创建成功了谁就是主…

【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,UKF滤波

基于【PSINS工具箱】&#xff0c;提供一个MATLAB例程&#xff0c;仅以速度为观测量的SINS/GNSS组合导航&#xff08;滤波方式为UKF&#xff09; 文章目录 工具箱程序简述运行结果 代码程序讲解MATLAB 代码教程&#xff1a;使用UKF进行速度观测1. 引言与基本设置2. 初始设置3. U…

ThinkBook 14+ 2024 Ubuntu 触控板失效 驱动缺失问题解决

首先我的电脑是thinkbook14 2024&#xff0c;从ubuntu18到ubuntu24&#xff0c;笔者整个都试了一遍&#xff0c;触摸板都没反应&#xff0c;确认不是linux系统内核问题&#xff0c;原因为驱动缺失。 解决步骤&#xff1a; &#xff08;1&#xff09;下载驱动&#xff0c;网址如…

如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息

目录 前言一、什么是Web Scraper API二、Web Scraper API 的优势&#xff1a;三、Web Scraper API 适用场景四、实践案例目标需求视频讲解1、选择Web Scraper API2、登录注册3、进入用户控制面板4、选择API5、触发数据收集 API6、获取爬虫结果7、分析爬虫结果&#xff08;1&…

Qt_day3_信号槽

目录 信号槽 1. 概念 2. 函数原型 3. 连接方式 3.1 自带信号 → 自带槽 3.2 自带信号 → 自定义槽 3.3 自定义信号 4. 信号槽传参 5. 对应关系 5.1 一对多 5.2 多对一 信号槽 1. 概念 之前的程序界面只能看&#xff0c;不能交互&#xff0c;信号槽可以让界面进行人机…

Elastic 通用分析:提高性能并降低成本

作者&#xff1a;来自 Elastic Luca Wintergerst•Tim Rhsen 在这篇博客中&#xff0c;我们将介绍我们的一位工程师的一项发现如何帮助我们在 QA 环境中节省数千美元的成本&#xff0c;并且一旦我们将这一变化部署到生产中&#xff0c;还可以节省更多的成本。 在当今的云服务和…

【WRF理论第十一期】检查WPS输出:geogrid和metgrid 的输出nc数据+ungrib输出WPS格式

【WRF理论第十一期】检查WPS输出&#xff1a;geogrid和metgrid输出nc数据ungrib输出WPS格式 检查WPS输出WPS 输出检查的重要性使用 NetCDF 格式查看 geogrid 和 metgrid 的输出检查和可视化数据的工具 ungrib 输出数据的格式使用 plotfmt 工具查看 ungrib 输出 参考 上一篇博客…

万字长文解读深度学习——卷积神经网络CNN

推荐阅读&#xff1a; 卷积神经网络&#xff08;CNN&#xff09;详细介绍及其原理详解 CNN笔记&#xff1a;通俗理解卷积神经网络 文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;主要组件输入层卷积层 (Convolutional Layer)批归一化层&#xff08;Batch Normalizat…

Redis生产问题(缓存穿透、击穿、雪崩)——针对实习面试

目录 Redis生产问题什么是缓存穿透&#xff1f;如何解决缓存穿透&#xff1f;什么是缓存击穿&#xff1f;如何解决缓存击穿&#xff1f;缓存穿透和缓存击穿有什么区别&#xff1f;什么是缓存雪崩&#xff1f;如何解决缓存雪崩&#xff1f; Redis生产问题 什么是缓存穿透&#x…

19、centos7优化

优化条目&#xff1a; 优化条目&#xff1a; 1.sudo管理用户授权 &#xff08;不用root管理,以普通用户的名义通过sudo提权&#xff09; 2.更改默认的远程连接SSH服务端口,禁止root用户远程连接,&#xff08;提前建立普通用户&#xff09;&#xff08;甚至更改为只监听内网IP…

河北省内首台心磁图仪正式落户河北梅奥心血管病医院

河北省内首台心磁图仪正式落户河北梅奥心血管病医院。 2024年11月9日&#xff0c;河北梅奥心血管病医院迎来了一场激动人心的历史时刻——河北省首台心磁图仪启用仪式在医院内隆重举行&#xff0c;标志着这一顶尖医疗设备正式入驻&#xff0c;为医院心脏影像诊断技术开启了全新…

【C语言刷力扣】283.移动零

题目&#xff1a; 解题思路&#xff1a; 将不为 0 的元素依次放在数组前面&#xff0c;再在数组末尾补上 0。 时间复杂度&#xff1a; 空间复杂度&#xff1a; void moveZeroes(int* nums, int numsSize) {int i 0, j 0;for (; i < numsSize; i) {if (nums[i]) {nums…

网络初阶——应用层:HTTPS 协议

一、HTTPS & HTTP 的区别 从协议的名字来看&#xff0c;HTTP 比 HTTPS 少了一个 S。而这个 “S”&#xff0c;其实可以理解成 “Safe”&#xff0c;所以不难看出&#xff0c;其实 HTTPS 就是 HTTP 的安全版。就是为了保证客户端 cookie 的传输安全的。 二、相关概念 1、明…

怎么禁止Ubuntu自动更新升级

怎么禁止Ubuntu自动更新升级 笔者在做MIT 6.S081的时候发现他给我的qemu自动更新了又卡住了&#xff0c;故关闭了自动更新 文章目录 怎么禁止Ubuntu自动更新升级一、图形化修改二、基于命令行修改配置文件的方法 一、图形化修改 1.打开设置->软件和更新->更新 2.选择自…

Spring Boot框架:构建符合工程认证的计算机课程

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

机器学习—选择激活函数

可以为神经网络中的不同神经元选择激活函数&#xff0c;我们将从如何为输出层选择它的一些指导开始&#xff0c;事实证明&#xff0c;取决于目标标签或地面真相标签y是什么&#xff0c;对于输出层的激活函数&#xff0c;将有一个相当自然的选择&#xff0c;然后看看激活函数的选…

【学习记录】使用CARLA录制双目摄像头SLAM数据

一、数据录制 数据录制的部分参考了网上的部分代码&#xff0c;代码本身并不复杂&#xff0c;基本都是简单的CARLA语法&#xff0c;关键的一点在于&#xff0c;CARLA内部本身并没有预设的双目摄像头&#xff0c;需要我们添加两个朝向相同的摄像头来组成双目系统&#xff0c;这…

[论文粗读][REALM: Retrieval-Augmented Language Model Pre-Training

引言 今天带来一篇检索增强语言模型预训练论文笔记——REALM: Retrieval-Augmented Language Model Pre-Training。这篇论文是在RAG论文出现之前发表的。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 语言模型预训练…

【人工智能】ChatGPT多模型感知态识别

目录 ChatGPT辅助细化知识增强&#xff01;一、研究背景二、模型结构和代码任务流程一&#xff1a;启发式生成 三、数据集介绍三、性能展示实现过程运行过程训练过程 ChatGPT辅助细化知识增强&#xff01; 多模态命名实体识别&#xff08;MNER&#xff09;最近引起了广泛关注。…

【黑马点评debug日记】

q1:登录无session跳转主页 p30&#xff0c;页面登录后返回&#xff0c;然后点击我的&#xff0c;需要重新设置&#xff0c;拦截器都没有问题。 参考&#xff1a; redis 黑马点评p30 login没有正常跳转&#xff0c;修改前端代码后还是一直跳转主界面_黑马点评登录后跳转到主页…