文章目录
- [1. 前言](#1. 前言)
- [2. MongoDB简介](#2. MongoDB简介)
- [3. MongoDB与关系型数据库的对比](#3. MongoDB与关系型数据库的对比)
- [4. MongoDB的安装](#4. MongoDB的安装)
- [5. Compass的使用](#5. Compass的使用)
- [6. MongoDB的常用语句](#6. MongoDB的常用语句)
- [7. 总结](#7. 总结)
1. 前言
本文旨在帮助大家快速了解MongoDB,快速了解和掌握MongoDB的干货内容.
2. MongoDB简介
MongoDB是一种NoSQL数据库,采用了文档数据库模型。它以BSON(Binary JSON)格式存储数据,支持动态模式和灵活的查询语言。MongoDB具有以下特点:
- 文档存储:MongoDB以文档(Document)的形式存储数据,每个文档是一个自包含的数据单元,类似于关系型数据库的行。
- 动态模式:MongoDB不需要预定义的表结构,可以根据需要动态添加字段,更加灵活。
- 分布式存储:MongoDB支持分片和副本集等方式进行水平扩展和高可用性部署。
- 强大的查询语言:MongoDB支持丰富的查询语言,包括嵌套查询、索引和聚合操作等,可以满足各种查询需求。
MongoDB适用于需要处理半结构化数据、大规模数据和高并发读写的场景,例如Web应用的用户数据、日志数据的存储和分析等。它提供了灵活的数据模型和强大的查询能力,使得开发者可以更加高效地处理复杂的数据操作。
NoSQL(Not Only SQL)是一种非关系型数据库(Non-Relational Database)的分类,与传统的关系型数据库(RDBMS)相对应。NoSQL数据库的设计目标是解决关系型数据库在大规模数据存储和高并发读写方面的限制。
3. MongoDB与关系型数据库的对比
MongoDB是一个文档型数据库,而关系型数据库则是一种基于表格的数据库。
可以看到还是有许多相似的地方,但也有很多不同.MongoDB提供了更好的可扩展性和大数据处理能力,而关系型数据库则更适用于小型企业和机构级别的数据处理。
4. MongoDB的安装
选择Community Server
选择版本以及对应的操作系统后,点击 Download 即可开始安装
下载完成之后打开安装包,一直点击 next 就可以了
安装完成之后,桌面会出现一个MongoDB的GUI工具Compass
的快捷方式
5. Compass的使用
双击打开,会看到以下界面:
点击Connect即可连接本地的MongoDB服务
注: admin,config和local为MongoDB默认的数据库
此外在Compass的下方有一个mongosh
的交互式命令行终端,就可以输入一些命令来操作MangoDB
6. MongoDB的常用语句
查看数据库:
sql
show databases
show dbs
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
选中/创建数据库:
sql
use [database]
注: 即使这个数据库不存在也可以运行.如果数据库不存在,则创建数据库 ,否则切换到指定数据库。
示例:
可以看到虽然创建了game
数据库,但是查看数据库时并没有这个数据库.这是因为数据库中没有数据
接下来我们来插入几条数据,但首先先来了解一下MongDB中文档的概念:
MongoDB集合是MongoDB文档数据存储的基本单位,类似于关系数据库中的表。它是一个无架构的容器,可以存储任意的文档数据。MongoDB的文档数据是使用JSON格式表示的,它们可以包含不同的字段和值。
插入一个文档到集合中:
sql
db.collection.insertOne()
示例:
db.user表示创建了一个名为user的集合
insertOne():用于插入文档到集合中
返回值:
- acknowledged: 表示这条数据是否插入成功,成功返回true
- insertedId: 全局唯一id,由Mongodb生成
查询集合中的数据:
sql
db.collection.find()
示例:
MongDB中的不同文档的结构并不要求相同,如下图所示:
可以看到一条数据有age字段,另一条数据没有age字段.,这也是与MySQL中的行不一样的地方.
插入多条数据:
sql
db.collection.insertMany()
示例:
限制查询返回结果的数量:
sql
limit()
示例:
排序查询结果:
sql
sort()
示例:
sort中的参数是一个对象,要传入一个字段,为比较的对象. 1表示升序,-1表示降序.
当然也可以比较多个参数,只需要再参数的后面再加一个参数就可以了
如下所示:
sql
db.user.find().sort({age:1,name:1})
跳过一些查询结果:
sql
skip()
示例:
表示的是查询按照年龄升序 ,并跳过前两条的数据
一般来说 skip函数都是和sort函数一起使用的,用来实现分页的功能
条件查询:
sql
find({field:value})
示例:
查询年龄为20的用户
注意如果输入的是"20",那么就不会产生任何数据,因为MongoDB中的数据类型是非常严格的
其中第二个字段后面的数据1,表示要返回的字段
这里的_id
是MongoDB自动返回的,如果不想返回,可以在第二参数中加上_id
,值为0
MongoDB中也可以使用一些运算符来实现复杂查询的语句
例如返回年龄大于18的用户
其中$gt就是>
,常见的运算符如下:
swift
lt:less than 小于
le:less than or equal to 小于等于
eq:equal to 等于
ne:not equal to 不等于
ge:greater than or equal to 大于等于
gt:greater than 大于
$in()
可以查询某个字段的值是否在一个数组中
例如查询年龄为18和20的用户
当然也可以使用$nin()查询某个字段的值是否不在一个数组中
$exists()
判断某个字段是否存在
查询具有age字段的用户:其中1或true表示存在,0和false表示不存在
其中1或true表示存在,0和false表示不存在
以下也是一些常用的MongoDB命令:
- $exists()只能判断某个字段是否存在,但不能判断某个字段的值是否存在
- $and:[{条件1},{条件2}]:逻辑与
- $or:[{条件1},{条件2}]:逻辑或
- $not:{条件}: 逻辑非
- $regex:
/
expression/
:正则表达式 - countDocuments():统计文档数量
- findOne({filter}):查询满足条件的一条数据
- updateOne():更新满足条件的一条数据
- updateMany():更新满足条件的多条数据
- deleteOne():删除满足条件的一条数据
- deleteMany():删除满足条件的多条数据
7. 总结
MongoDB是一个功能强大的数据库管理系统,适合处理具有高度的非结构化数据和数据量的应用程序。它用于各种用例,包括Web应用程序、大数据等,具有高可伸缩性、高性能、高可用性、分布式和非结构化数据存储等特点。