非关系型数据库(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.rhkb.cn/news/468774.html

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

相关文章

linux命令详解,存储管理相关

存储管理 一、内存使用量&#xff0c;free free 命令是一个用于显示系统中物理内存&#xff08;RAM&#xff09;和交换空间&#xff08;swap&#xff09;使用情况的工具 free -m free -m -s 5参数 -b 功能: 以字节&#xff08;bytes&#xff09;为单位显示内存使用情况。说…

关于若依500验证码问题的求助

关于若依框架中验证码出现500错误的问题&#xff0c;这通常表示服务器内部错误。以下是一些可能的原因及解决方案&#xff1a; 一、配置文件问题 .env.production文件&#xff1a; 确保.env.production文件中的VUE_APP_BASE_API已经修改成服务器上的域名地址&#xff0c;而不…

HashMap(深入源码追踪)

一篇让你搞懂HashMap的几个最重要的知识点,往源码跟踪可以让我们很轻松应对所谓的一些八股面试题. 一. 属性解释 先来解释HashMap中重要的常量属性值 DEFAULT_INITIAL_CAPACITY : 默认初始化容量,也就是如果不指定初始化的Map存储容量大小,默认生成一个存储16个空间的Map集合…

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto&#xff1a;Crypto-2&#xff1a;Crypto-3&#xff1a; 前言&#xff1a;本次比赛已经结束&#xff0c;用于赛后复现&#xff0c;欢迎大家交流学习&#xff01; Crypto&#xff1a; Crypto-2&#xff1a; …

【代码随想录day22】【C++复健】77. 组合;216.组合总和III; 17.电话号码的字母组合

77. 组合 这题做完之后还是有一种稀里糊涂的感觉。思考了半天什么范围合理&#xff0c;并且怎么设置才能让这个范围合理&#xff0c;然而一看答案&#xff0c;发现答案完全没考虑这些因素&#xff0c;直接暴力全遍历了。只能说确实这样能够放弃思考&#xff0c;比较省心一些.…

solidworks默认模板无效/打开step文件为空白 不显示模型

①打开step文件时如下提示&#xff1a; 是由于sw模版没有设置好 解决方法&#xff1a; 把零件和装配体模版选一下&#xff0c;gb_part和gb_assembly 再打开文件就不会有提示了。 ②打开step文件为空白 不显示模型 文件未损坏且sw版本正确情况下&#xff0c; 首先尝试按F&…

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…

微深节能 煤码头自动化翻堆及取料集控系统 格雷母线

一、系统概述 微深节能在煤码头自动化翻堆及取料集控系统中引入了格雷母线高精度位移测量系统&#xff0c;该系统是一项重要的技术创新&#xff0c;显著提升了煤码头作业的自动化水平和精确性。它主要用于实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制&#xff0c;从…

LeetCode 热题100 之 栈

1.有效的括号 思路分析&#xff1a;我们可以使用栈&#xff08;stack&#xff09;来解决这个问题。栈是一种先进后出的数据结构&#xff0c;这与括号匹配的需求非常契合。 unordered_map<char, char> bracket_map&#xff1a;这个哈希表用来存储右括号与左括号的对应关系…

yolov11-seg数据集制作训练推理流程:

文章目录 前言一、数据集制作二、模型训练推理&#xff1a; 前言 随着深度学习技术的不断发展&#xff0c;目标检测与分割技术在计算机视觉领域扮演着越来越重要的角色。YOLO&#xff08;You Only Look Once&#xff09;作为一种高效、实时的目标检测算法&#xff0c;自提出以…

基于Spring Boot的乡政府管理系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效地信息处理的作用&#xf…

python的学习

0.tips 1.变量命名规则 2.变量的赋值 3.变量的类型 int&#xff0c;float&#xff0c;str&#xff08;双引号、单引号、三引号包含都可以&#xff09; 类型带来的意义 动态类型的基本特性 4.注释 5.控制台 格式化字符串f-string 输入/输出input 6.运算符 算术运算符 //&…

信息安全工程师(79)网络安全测评概况

一、定义与目的 网络安全测评是指参照一定的标准规范要求&#xff0c;通过一系列的技术、管理方法&#xff0c;获取评估对象的网络安全状况信息&#xff0c;并对其给出相应的网络安全情况综合判定。其对象主要为信息系统的组成要素或信息系统自身。网络安全测评的目的是为了提高…

【GoWeb示例】通过示例学习 Go 的 Web 编程

文章目录 你好世界HTTP 服务器路由&#xff08;使用 gorilla/mux&#xff09;连接到 MySQL 数据库MySQL 数据库简单操作模板静态资源和文件操作表单处理中间件&#xff08;基础&#xff09;中间件&#xff08;高级&#xff09;会话JSONWebsockets密码哈希 你好世界 Go语言创建…

UnixBench和Geekbench进行服务器跑分

1 概述 服务器的基准测试&#xff0c;常见的测试工具有UnixBench、Geekbench、sysbench等。本文主要介绍UnixBench和Geekbench。 1.1 UnixBench UnixBench是一款开源的测试UNIX系统基本性能的工具&#xff08;https://github.com/kdlucas/byte-unixbench&#xff09;&#x…

打造个性化时钟应用:结合视觉与听觉的创新实践

​ 在数字时代&#xff0c;虽然手机、电脑等设备已经能够非常方便地显示时间&#xff0c;但一款融合了视觉艺术和声音效果的桌面时钟仍能给我们的日常生活带来不一样的体验。本文将引导读者通过Python语言及其强大的库支持来创建一个具有整点及半点报时功能的美观时钟界面。该项…

ASMR助眠声音视频素材去哪找 吃播助眠素材网站分享

在快节奏的现代生活中&#xff0c;越来越多的人感到压力山大&#xff0c;许多人开始寻求助眠和放松的方式。而ASMR&#xff08;自发性知觉经络反应&#xff09;助眠声音视频&#xff0c;凭借其独特的声音刺激和放松效果&#xff0c;成为了睡前的“神器”。如果你是一位内容创作…

Ente: 我们的 Monorepo 经验

原文&#xff1a;manav - 2024.10.29 九个月前&#xff0c;我们切换到了 monorepo。在此&#xff0c;我将介绍我们迄今为止的切换经验。 这并不是一份规范性的建议&#xff0c;而是一个经验的分享&#xff0c;目的是希望能够帮助其他团队做出明智的决策。 与大多数岔路不同&…

css:还是语法

emmet的使用 emmet是一个插件&#xff0c;Emmet 是 Zen Coding 的升级版&#xff0c;由 Zen Coding 的原作者进行开发&#xff0c;可以快速的编写 HTML、CSS 以及实现其他的功能。很多文本编辑器都支持&#xff0c;我们只是学会使用它&#xff1a; 生成html结构 <!-- emme…

常见计算机网络知识整理(未完,整理中。。。)

TCP和UDP区别 TCP是面向连接的协议&#xff0c;发送数据前要先建立连接&#xff1b;UDP是无连接的协议&#xff0c;发送数据前不需要建立连接&#xff0c;是没有可靠性&#xff1b; TCP只支持点对点通信&#xff0c;UDP支持一对一、一对多、多对一、多对多&#xff1b; TCP是…