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

embedded/2024/11/14 16:53:15/

目录

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.ppmy.cn/embedded/136806.html

相关文章

CSS教程(四)- 字体

1、尺寸单位 px 像素单位% 百分比&#xff0c;参照父元素对应属性的值进行计算em 字体尺寸单位&#xff0c;参照父元素的字体大小计算&#xff0c;1em16pxrem字体尺寸单位,参照根元素的字体大小计算&#xff0c;1rem16px 2、字体属性 介绍 CSS Fonts (字体)属性用于定义字体…

NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型

论文速读|LongReward: Improving Long-context Large Language Models with AI Feedback 论文信息&#xff1a; 简介&#xff1a; 该论文试图解决的问题是如何提高长文本上下文大型语言模型&#xff08;LLMs&#xff09;在监督式微调&#xff08;SFT&#xff09;中的性能&#…

JVM知识点大全(未完...)

JVM运行时数据区域 堆 堆是Java虚拟机中用于存储对象的主要区域&#xff0c;包括字符串常量池。绝大多数对象都是在堆中创建的&#xff08;少部分对象可能会在栈上分配&#xff09;。为了更好地进行垃圾回收&#xff0c;堆被划分为年轻代和老年代两部分。年轻代又被进一步分为E…

【IC每日一题:IC验证面试常问-3】

【IC每日一题&#xff1a;IC验证面试常问-3】 1.1 SV约束如何使用以及有哪几种方式&#xff1f;”:“和":/"的区别&#xff1f;&#xff0c;rand和randc的区别&#xff1f;如何关闭约束&#xff1f;1.2 代码覆盖率、功能覆盖率、SVA覆盖率都是衡量什么的&#xff1b;…

创新体验触手可及 紫光展锐携手影目科技推出AI眼镜开放平台

近日&#xff0c;紫光展锐携手影目科技共同发布了搭载展锐W517芯片的影目X系列AI眼镜开放平台。这一产品的推出标志着双方在智能穿戴领域的深度协作&#xff0c;将紫光展锐的领先芯片技术与影目的产品创新相融合&#xff0c;合力打造全球智能眼镜市场的标杆产品。这一战略布局不…

动态避障-图扑自动寻路 3D 可视化

自动寻路是机器人导航的核心技术&#xff0c;其原理主要涉及机器人与环境之间的复杂信息交互与处理。在自动寻路过程中&#xff0c;机器人依靠先进的传感器系统&#xff0c;如高清摄像头、精密激光雷达和灵敏超声波装置&#xff0c;全方位感知周围环境。这些传感器能够实时捕捉…

底层视角看C语言

文章目录 main函数很普通main函数之前调用了什么main函数和自定义函数的对比变量名只为人而存在goto是循环的本质指针变量指针是一个特殊的数字汇编层面看指针数组和指针数组越界问题低端地址越界高端地址越界引用就是指针main函数很普通 main函数是第一个被调用的函数吗?在用…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…