MongoDB
0x01 概述
-
MongoDB 是一个基于分布式文件存储的开源数据库,由 C++ 语言编写,提供了一个可扩展的高性能数据存储解决方案
-
MongoDB 是一个文档型数据库,属于非关系型数据库(NoSQL)的一种,其数据是以文档的形式来存储的
- 文档(Document)在 MongoDB 中是一个非常重要的概念,类似 MySQL 中的“行”,数据格式是 Binary JSON(简称 BSON)
- 数据库是由一个个的集合组成的,类似 MySQL 中的“表”,包括多个文档
MongoDB 与 MySQL 的对比
MongoDB MySQL 数据库(database) 数据库(database) 集合(collection) 表(table) 文档(document) 行(row) 字段(field) 列(column) 索引(index) 索引(index) _id
主键 $lookup
join
$group
group by
0x02 安装配置
(1)Windows
- 在官网下载安装包进行安装
(2)Mac
-
方法一:同 Windows 下载安装包并安装
-
方法二:在终端执行以下命令
brew install mongodb-atlas atlas setup
(3)VSCode 插件
- 搜索“MongoDB for VS Code”并安装
- 创建连接并设置地址:
mongodb://localhost:27017
(4)官方工具
a. GUI 工具
官网下载
b. MongoShell
官网下载
0x03 常用命令
在 Mongo Shell 中进行操作
help
:查看帮助cls
:清屏
(1)创建数据库 / 集合
show databases
/show dbs
:查看当前数据库- 当真正开始插入数据时,数据库才会被创建
use [database_name]
:切换数据库db.[collection_name]
:创建集合- 例:创建集合 users:
db.user
- 数据保存在集合中,增删改查时需要指定集合,以下内容以对 users 集合进行操作为例
- 例:创建集合 users:
(2)插入数据
-
db.users.insertOne({name: "Alex", age: 18})
:插入一条数据到指定集合中-
执行该插入命令后,MongoDB 会返回以下内容:
{ acknowledged: true, insertedId: ObjectId("xxx") }
其中,
acknowledged
表示是否插入成功,insertedId
表示数据的 id(此 id 可看作 MySQL 中的主键)
-
-
db.users.insertMany([{name: "Bob"}, {name: "Clarlie"}])
:插入一条数据到指定集合中
(3)查询数据
db.users.find()
:查看指定集合中的全部数据db.users.find().limit(x)
:限制查询返回结果的数量为 xdb.users.find().sort({_id: 1, age: -1})
:对查询返回结果按_id
字段和age
字段进行排序,1
表示升序,-1
表示降序db.users.find().sort({age: 1}).skip(1)
:跳过查询返回的第一条结果- 一般
skip()
常与sort()
配合使用,从而实现分页的效果
- 一般
db.users.find({age: 18})
:条件查询,查询age
字段值为 18 的结果db.users.find({age: 18}, {name: 1, _id: 0})
:查询age
字段值为 18 的结果并仅返回对应的name
字段值db.users.find({age: 18}, {name: 0})
:查询age
字段值为 18 的结果并返回除name
之外其他所有字段值
db.users.find({age: {$gt: 18}})
:比较查询,查询age
字段值大于 18 的结果$eq
:等于$gt
:大于$gte
:大于等于$lt
:小于$lte
:小于等于
db.users.find({age: {$in: [18, 20]}})
:多条件查询,查询age
字段值为 18 或 20 的结果$nin
:表示not in
的意思
db.users.find({sex: {$exists: true}})
:存在性查询,查询存在sex
字段的文档true
=1
,false
=0
- 仅查询字段是否存在,不能查询字段值是否存在
db.users.find({age: {$and: [{$gte: 18}, {$lte: 20}]}})
:逻辑查询,查询age
字段值大于等于 18 且小于等于 20 的结果$and
:逻辑与$or
:逻辑或$not
:逻辑非
db.users.find({name: {$regex: /张/}})
:正则查询,查询name
字段含“张”的结果db.users.findOne({age: 18})
:查询满足条件的一条数据
(4)更新数据
db.users.updateOne({age: 1}, {$set: {sex: null}})
:更新满足条件的一条数据db.users.updateMany()
:更新满足条件的多条数据
(5)删除数据
db.users.deleteOne({age: 1})
:删除满足条件的一条数据db.users.deleteMany()
:删除,满足条件的多条数据
(6)聚合函数
db.users.countDocuments()
:统计文档数量,在括号中可传入条件,同find()
-End-