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

目录

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.mzph.cn/news/885127.shtml

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

相关文章

hive数据查询语法

思维导图 基本查询 基本语法 SELECT [ALL | DISTINCT] 字段名, 字段名, ... FROM 表名 [inner | left outer | right outer | full outer | left semi JOIN 表名 ON 关联条件 ] [WHERE 非聚合条件] [GROUP BY 分组字段名] [HAVING 聚合条件] [ORDER BY 排序字段名 asc | desc…

前端小知识:我居然没学会用 split 方法?!

小伙伴们&#xff0c;你们会用 JavaScript 的 split 方法吗&#xff1f;最近我才发现&#xff0c;原来我多年来一直没真正掌握它&#xff0c;结果在解题时被卡住了。所以今天&#xff0c;我决定好好整理一下这个方法的用法。 在讨论问题之前&#xff0c;先来看一下 split 的两种…

VTK知识学习(2)-环境搭建

1、c方案 1.1下载源码编译 官网获取源码。 利用Cmake进行项目构建。 里面要根据实际使用的情况配置相关的模块哟&#xff0c;这个得你自行研究下了。 CMAKEINSTALLPREFIX--这个选项的值表示VTK的安装路径&#xff0c;默认的路径是C:/Program Files/VTK。该选项的值可不作更…

Halcon 从XML中读取配置参数

1、XML示例 以下是一个XML配置文件的示例,该文件包含了AOI(自动光学检测)算法的环境参数和相机逻辑参数: <AOI><!--AOI算法参数 20241106--><Env><!--环境参数--><Param name="GPUName" value="NVIDIA GeForce RTX 405…

SQL--查询连续三天登录数据详解

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 20…

结构方程、生物群落、数据统计、绘图分析在生态领域的应用

R语言结构方程模型&#xff08;SEM&#xff09;在生态学领域中的实践应用 结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0…

vue使用canves把数字转成图片验证码

<canvas id"captchaCanvas" width"100" height"40"></canvas>function drawCaptcha(text) {const canvas document.getElementById(captchaCanvas);const ctx canvas.getContext(2d);// 设置背景颜色ctx.fillStyle #f0f0f0;ctx.f…

双指针算法习题解答

1.移动零 题目链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a;该题要求将数组中为0的元素全部转移到数组的末尾&#xff0c;同时不能改变非零元素的相对位置。 解题思路&#xff1a;我们可以用变量dest和cur将该数组分为三个区域。…

「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用

自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件&#xff0c;鸿蒙应用能够提高代码的可维护性&#xff0c;并简化复杂布局的构建。本篇将介绍如何创建自定义组件&#xff0c;如何向组件传递数据&#xff0c;以及如何在不同页面间复用这些组件。 关键…

【SpringCloud】Nacos微服务注册中心

微服务的注册中心 注册中心可以说是微服务架构中的"通讯录"&#xff0c;它记录了服务和服务地址的映射关系 。在分布式架构中&#xff0c; 服务会注册到这里&#xff0c;当服务需要调⽤其它服务时&#xff0c;就从这里找到服务的地址&#xff0c;进行调用。 注册中心…

【Go语言】| 第1课:Golang安装+环境配置+Goland下载

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

数据库优化指南:如何将基本功能运用到极致?

一次问题 数据库的归档日志很多&#xff0c;多到那个机器的硬件不足以处理了。查看了一下为什么产生这么多日志。发现其实都是一些不当的使用方式。比如开发人员建立了一个xxxx_temp从这么名字上就应该能猜出来这是要做什么&#xff1f;美其名曰是临时表。 就是导入一批数据&am…

150道MySQL高频面试题,学完吊打面试官--关于索引的五道大厂面试题,跳槽面试很重要

前言 本专栏为150道MySQL大厂高频面试题讲解分析&#xff0c;这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。 MySQL应用广泛&#xff0c;在多个开发语言中都处于重要地位&#xff0c;所以最好都要掌握MySQL的精华面试题&#xff0c;这也…

自攻螺钉的世纪演变:探索关键设计与应用

自攻螺钉作为现代工业和建筑中的不可或缺的标准部件&#xff0c;经过了超过100年的发展和创新。从1914年最早的铁螺钉设计到今天的自钻自攻螺钉&#xff0c;自攻螺钉的设计不断优化&#xff0c;以适应更复杂的应用需求。本文将回顾自攻螺钉的演变历程&#xff0c;分析其设计原理…

【KMP算法】

目录 BF算法 KMP算法 BF算法 F算法&#xff0c;即暴力(Brute Force)算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配&#xff0c;若相等&#xff0c;则继续比较S的第二个字符和 T的第二个字符&#xf…

快速学习Django框架以开发Web API

简介 Django是一个高级Python Web框架,它鼓励快速开发和简洁实用的设计。由经验丰富的开发者构建,Django可以为你处理大量的Web开发任务,使你能够专注于编写应用的关键组件。Django的模块化设计、可复用性和广泛的社区支持,使其成为开发Web应用和API的理想选择。 在本文中…

论文 | Evaluating the Robustness of Discrete Prompts

论文《Evaluating the Robustness of Discrete Prompts》深入探讨了离散提示&#xff08;Discrete Prompts&#xff09;的鲁棒性&#xff0c;即离散提示在自然语言处理任务中面对不同扰动时的表现。研究特别关注离散提示在自然语言推理&#xff08;NLI&#xff09;任务中的表现…

2024中国国际数字经济博览会:图为科技携明星产品引领数智化潮流

10月24日&#xff0c;全球数智化领域的目光齐聚于中国石家庄正定&#xff0c;一场关于数字经济未来的盛会—2024中国国际数字经济博览会在此拉开帷幕。 云边端算力底座的领航者&#xff0c;图为科技携其明星产品惊艳亮相&#xff0c;期待与您共赴一场数智化的非凡之旅&#xff…

7.2、实验二:被动接口和单播更新

源文件链接&#xff1a; 7.2、实验二&#xff1a;被动接口和单播更新: https://url02.ctfile.com/d/61945102-63671890-6af6ec?p2707 (访问密码: 2707) 一、被动接口 1.介绍 定义: 在路由协议的配置中&#xff0c;一个被动接口指的是一个接口不发送路由更新包的配置方式&a…

4.3 Linux的中断处理流程

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 原创不易&#xff0c;需要大家多多鼓励&#xff01;您的关注、点赞、收藏就是我的创作动力&#xff01; 4.3 Linux的中断处理流程 先上图&#xff0c;一图胜千言&#xff01; 图中心的蓝色部分&#xff0c;是L…