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主键 $lookupjoin$groupgroup 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-

浙公网安备 33010602011771号