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

目录

1.MongoDB

1.MongoDB的特点

2.MongoDB的应用场景

3.MongoDB与MySQL的比较

2.数据库操作

[1. 创建数据库](#1. 创建数据库)

[2. 切换数据库](#2. 切换数据库)

[3. 查看所有数据库](#3. 查看所有数据库)

[4. 查看当前数据库](#4. 查看当前数据库)

[5. 删除数据库](#5. 删除数据库)

[6. 查看数据库统计信息](#6. 查看数据库统计信息)

[7. 备份数据库](#7. 备份数据库)

[8. 恢复数据库](#8. 恢复数据库)

[9. 创建用户和授权](#9. 创建用户和授权)

[10. 删除用户](#10. 删除用户)

[11. 查看用户列表](#11. 查看用户列表)

3.集合和文档操作

[1. 创建集合](#1. 创建集合)

[2. 删除集合](#2. 删除集合)

[3. 重命名集合](#3. 重命名集合)

[4. 查看所有集合](#4. 查看所有集合)

[5. 插入文档](#5. 插入文档)

[6. 查询文档](#6. 查询文档)

[7. 更新文档](#7. 更新文档)

[8. 删除文档](#8. 删除文档)

[9. 创建索引](#9. 创建索引)

[10. 删除索引](#10. 删除索引)

[11. 查看索引](#11. 查看索引)

[12. 计数文档](#12. 计数文档)

[13. distinct操作](#13. distinct操作)

[14. aggregate聚合](#14. aggregate聚合)

[15. findAndModify](#15. findAndModify)

[16. bulkWrite](#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命令切换到不存在的数据库来创建的。当你第一次存储数据时,数据库和集合会被自动创建。

javascript 复制代码
use newDatabaseName

2. 切换数据库

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

javascript 复制代码
use existingDatabaseName

3. 查看所有数据库

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

javascript 复制代码
show dbs

4. 查看当前数据库

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

javascript 复制代码
db

5. 删除数据库

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

javascript 复制代码
db.dropDatabase()

6. 查看数据库统计信息

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

javascript 复制代码
db.stats()

7. 备份数据库

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

javascript 复制代码
mongodump --db databaseName --out backupDirectory

8. 恢复数据库

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

javascript 复制代码
mongorestore --db databaseName backupDirectory

9. 创建用户和授权

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

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

10. 删除用户

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

javascript 复制代码
db.dropUser("username")

11. 查看用户列表

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

javascript 复制代码
show users

3.集合和文档操作

1. 创建集合

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

javascript 复制代码
db.createCollection("collectionName")

2. 删除集合

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

javascript 复制代码
db.collectionName.drop()

3. 重命名集合

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

javascript 复制代码
db.collectionName.renameCollection("newCollectionName")

4. 查看所有集合

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

javascript 复制代码
show collections

javascript 复制代码
db.getCollectionNames()

5. 插入文档

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

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

6. 查询文档

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

javascript 复制代码
db.collectionName.find({key: "value"})

7. 更新文档

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

javascript 复制代码
db.collectionName.update({key: "value"}, {$set: {key: "newValue"}})

8. 删除文档

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

javascript 复制代码
db.collectionName.remove({key: "value"})

9. 创建索引

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

javascript 复制代码
db.collectionName.createIndex({key: 1})

10. 删除索引

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

javascript 复制代码
db.collectionName.dropIndex({key: 1})

11. 查看索引

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

javascript 复制代码
db.collectionName.getIndexes()

12. 计数文档

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

javascript 复制代码
db.collectionName.count()

13. distinct操作

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

javascript 复制代码
db.collectionName.distinct("key")

14. aggregate聚合

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

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

15. findAndModify

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

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

16. bulkWrite

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

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

4.查询操作

基本查询操作

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

条件查询操作

  • 比较操作符 :如$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" } })

聚合查询操作

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

高级查询技巧

  • 使用索引:合理使用索引可以显著提高查询性能。
  • 查询优化 :使用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注解来定义索引。
相关推荐
大霸王龙20 分钟前
在 Django 中使用 SMTP 发送邮件是一个常见的需求
数据库·django·sqlite
纪伊路上盛名在1 小时前
爬虫1:uniprot蛋白质序列数据+canvas图片
数据库·学习·知识图谱·学习方法
程序员黄同学3 小时前
如何使用 Python 连接 MySQL 数据库?
数据库·python·mysql
新手小袁_J4 小时前
实现Python将csv数据导入到Neo4j
数据库·python·neo4j·《我是刑警》·python连接neo4j·python导入csv·csv数据集导入neo4j
ZHOUPUYU4 小时前
最新 neo4j 5.26版本下载安装配置步骤【附安装包】
java·后端·jdk·nosql·数据库开发·neo4j·图形数据库
シ風箏4 小时前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
张声录14 小时前
【ETCD】【实操篇(四)】etcd常见问题快问快答FAQ
数据库·etcd
CherishTaoTao6 小时前
sqlite基础
数据库·oracle·sqlite
嶔某7 小时前
MySql:基本查询
数据库·mysql
开心工作室_kaic9 小时前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache