MongoDB的入门使用
数据库
- 数据库是按照数据结构来组织、存储和管理数据的仓库
- 程序是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失
- 所以就需要讲一些程序运行的数据持久化到硬盘中,以确保数据的安全性。而数据库就是数据持久化的最佳选择
- 即,数据库就是存储数据的仓库
数据库的分类
关系型数据库(RDBMS)
- MySQL、Oracle、DB2、SQL Server、……
- 关系数据库中全都是表
非关系型数据库(NoSQL)
- MongoDB、Redis、……
- 键值对数据库
- 文档数据库MongoDB。
MongoDB
MongoDB 简介
- MongoDB是为快速开发互联网Web应用而设计的数据库系统
- MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分
- MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库存的是各种各样的JSON(BSON)。
MongoDB 的下载安装
MongoDB的官网下载地址:https://www.mongodb.com/download-center/community
Windows其他下载地址:https://www.mongodb.org/dl/win32
MongoDB的版本偶数版本为稳定版,奇数版本为开发版
MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持
当前安装的版本是:Windows10 64位 MongoDB 3.2.4
Windows的安装,一直下一步就好。
配置环境变量
-
复制 安装目录/bin 路径 如 D:\Program\MongoDB\bin
-
右击我的电脑,属性-高级系统设置-环境变量
-
用户变量-path-添加复制的路径
-
验证是否配置成功:
- mongod:用来启动服务器
命令行窗口 输入 mongod 输出: 2020-01-02T15:14:19.948+0800 I CONTROL [initandlisten] MongoDB starting : pid=23372 port=27017 dbpath=C:\data\db\ 64-bit host=ruozhuliufeng 2020-01-02T15:14:19.949+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] db version v3.2.4 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] allocator: tcmalloc 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] modules: none 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] build environment: 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] distmod: 2008plus-ssl 2020-01-02T15:14:19.950+0800 I CONTROL [initandlisten] distarch: x86_64 2020-01-02T15:14:19.951+0800 I CONTROL [initandlisten] target_arch: x86_64 2020-01-02T15:14:19.952+0800 I CONTROL [initandlisten] options: {} 2020-01-02T15:14:19.953+0800 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory C:\data\db\ not found., terminating 2020-01-02T15:14:19.954+0800 I CONTROL [initandlisten] dbexit: rc: 100 说明配置成功!
-
在C盘创建文件夹 data,在data文件夹中新建db文件夹用来存放数据库信息
命令行再次输入mongod启动服务器 C:\Users\若竹流风>mongod 2020-01-02T15:17:28.410+0800 I CONTROL [initandlisten] MongoDB starting : pid=22108 port=27017 dbpath=C:\data\db\ 64-bit host=ruozhuliufeng 2020-01-02T15:17:28.411+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2 2020-01-02T15:17:28.413+0800 I CONTROL [initandlisten] db version v3.2.4 2020-01-02T15:17:28.414+0800 I CONTROL [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30 2020-01-02T15:17:28.417+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015 2020-01-02T15:17:28.418+0800 I CONTROL [initandlisten] allocator: tcmalloc 2020-01-02T15:17:28.419+0800 I CONTROL [initandlisten] modules: none 2020-01-02T15:17:28.420+0800 I CONTROL [initandlisten] build environment: 2020-01-02T15:17:28.422+0800 I CONTROL [initandlisten] distmod: 2008plus-ssl 2020-01-02T15:17:28.428+0800 I CONTROL [initandlisten] distarch: x86_64 2020-01-02T15:17:28.429+0800 I CONTROL [initandlisten] target_arch: x86_64 2020-01-02T15:17:28.429+0800 I CONTROL [initandlisten] options: {} 2020-01-02T15:17:28.441+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=4G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2020-01-02T15:17:28.554+0800 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker 2020-01-02T15:17:28.554+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'C:/data/db/diagnostic.data' 2020-01-02T15:17:28.577+0800 I NETWORK [initandlisten] waiting for connections on port 27017 最后一行表明服务器已成功启动,默认端口27017 注意:32位系统启动服务器时,需要输入以下内容: mongod --storageEngine=mmapv1
-
测试连接MongoDB:
- mongo:用来连接数据库
上一个命令行不能关闭,新建命令行,并输入mongo C:\Users\若竹流风>mongo MongoDB shell version: 3.2.4 connecting to: test Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user > 出现 > 表明连接成功
-
指定端口和路径
-
mongod --dbpath 路径 --port 端口号
-
例如:
在D盘新建data文件夹(名字自定义),在data文件内新建db文件夹用来存放数据库信息 C:\Users\若竹流风>mongod --dbpath D:\data\db --port 10086 2020-01-02T15:31:02.322+0800 I CONTROL [initandlisten] MongoDB starting : pid=14304 port=10086 dbpath=D:\data\db 64-bit host=ruozhuliufeng 2020-01-02T15:31:02.323+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2 2020-01-02T15:31:02.325+0800 I CONTROL [initandlisten] db version v3.2.4 2020-01-02T15:31:02.325+0800 I CONTROL [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30 2020-01-02T15:31:02.326+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015 2020-01-02T15:31:02.326+0800 I CONTROL [initandlisten] allocator: tcmalloc 2020-01-02T15:31:02.327+0800 I CONTROL [initandlisten] modules: none 2020-01-02T15:31:02.327+0800 I CONTROL [initandlisten] build environment: 2020-01-02T15:31:02.328+0800 I CONTROL [initandlisten] distmod: 2008plus-ssl 2020-01-02T15:31:02.328+0800 I CONTROL [initandlisten] distarch: x86_64 2020-01-02T15:31:02.329+0800 I CONTROL [initandlisten] target_arch: x86_64 2020-01-02T15:31:02.331+0800 I CONTROL [initandlisten] options: { net: { port: 10086 }, storage: { dbPath: "D:\data\db" } } 2020-01-02T15:31:02.333+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=4G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2020-01-02T15:31:02.442+0800 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker 2020-01-02T15:31:02.442+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'D:/data/db/diagnostic.data' 2020-01-02T15:31:02.457+0800 I NETWORK [initandlisten] waiting for connections on port 10086 服务器启动成功,监听端口 10086 注意:服务器的窗口不能关闭,最大的端口后不能超过65535 32位第一次需要输入mongod --storageEngine=mmapv1 ,第二次不需要
-
-
将MongoDB设置为系统服务,可以自动后台启动,不需要每次手动启动
-
1.在C盘data目录新建log文件夹,用来存放日志文件
-
2.在安装目录(与bin文件夹同级,如D:\Program\MongoDB)下创建一个配置文件mongod.cfg
systemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db
-
3.管理员模式打开控制台,并输入如下指令
sc.exe create MongoDB binPath= "\"mongo bin路径\mongod.exe\" --service -config=\"mongo路径\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" 例如本机需要输入: C:\Windows\system32>sc.exe create MongoDB binPath= "\"D:\Program\MongoDB\bin\mongod.exe\" --service -config=\"D:\Program\MongoDB\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" [SC] CreateService 成功
-
4.启动服务
- 任务管理器-服务-打开服务-搜索MongoDB并打开
-
5.如果服务没有启动成功或有问题,需要删除服务并从第一步重新开始
sc delete MongoDB
-
MongoDB的基本操作
基本概念
-
数据库(database):数据库是一个仓库,在仓库中可以存放集合
-
集合(collection):集合类似于数组,集合就是一组文档,集合中存储的文档可以是各种各样的,没有格式要求
-
文档(document):文档数据库中的最小单位,类似于JS中的对象,在MongoDB中存储和操作的内容都是文档,文档的属性值是一个文档时,就称为内嵌文档
-
多个文档组成集合,多个集合组成数据库。
-
在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
基本操作
MangoDB的图形化操作软件下载地址:
https://www.mongodbmanager.com/download
Shell命令
- hlep :语法帮助
- use :更改当前操作的数据库
- show :根据当前参数显示列表
- dbs :显示数据库列表
- collections :显示当前数据库的集合
- profile :显示时间超过1毫秒的system.profile条目
- log[name] :显示登陆记忆的最后一段
- exit :退出数据库
- load(script) :加载js文件db.auth(username,password),在当前数据库做身份验证
- db :查看当前所在的数据库
创建数据库
- use 数据库名
- 使用use时,如果数据库存在则会进入到相应的数据库,如果不存在则会自动创建
- 一旦进入数据库,则可以使用db来引用当前库
- db.collection.insert(文档)
- 向集合中插入文档,如果集合不存在则创建
- db.createCollection()
- 创建一个新的集合
- db.cllection.drop()
- 删除集合
添加文档
db..insert(文档对象)
- insert()可以用于向集合中添加一个或多个文档,可以传递一个对象,或一个数组(多个文档)
- 可以将对象或数组中的对象添加进集合中
- 添加时如果集合或数据库不存在,会自动创建
- 插入的文档对象会默认添加_id属性,这个属性对应一个唯一的id,是文档的唯一标识。可以自己指定,这样数据库就不会自动添加了,如果自己指定 _id属性,也必须确保它的唯一性,建议默认。
db..insertOne(): 插入一个文档对象(3.2及以后版本可用)
db..insertMany(): 插入多个文档对象(3.2及以后的版本可用)
小案例
案例1:向user数据库,stus集合中插入一个新的学生对象{name:"Tom”,age:18,gender:"male"}
> use user
switched to db user
> db.stus.insert({name:"Tom",age:18,gender:"male"}); //添加1个文档,3.2及以上版本可以使用insertOne()方法
WriteResult({ "nInserted" : 1 })
> show dbs // 查看所有数据库
local 0.000GB
user 0.000GB
> show collections // 查看所有集合
stus
> db.stus.find() // 查看集合内所有文档
{ "_id" : ObjectId("5e0dd4658d578ff6fa9f2820"), "name" : "Tom", "age" : 18, "gender" : "male" }
> db.stus.insert([
... {name:"Jerry",age:19,gender:"male"},
... {name:"Mike",age:20,gender:"male"},
... {name:"Merry",age:18,gender:"female"}
... ]); //添加多个文档,3.2及以上版本可以使用insertMany()方法
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.teacher.insertOne({name:"Chen",age:45,gender:"male"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e0dddb98d578ff6fa9f2824")
}
> db.teacher.insertMany([{name:"Wang",age:30,gender:"female"},{name:"Li",age:33,gender:"male"}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5e0dde228d578ff6fa9f2825"),
ObjectId("5e0dde228d578ff6fa9f2826")
]
}
>
查询文档
db..find()
- MongoDB使用find()来对文档进行查询
- find()需要一个查询文档作为参数,如果不传该参数,则会返回集合中的所有元素
- {属性:值} :查询属性时指定值的文档
- 可以将查询条件以键值对的形式添加到查询文档中
- MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过 . 的形式类匹配
- 如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号(综合案例13)
- 返回的是一个数组
db..findOne()
-
用来查询集合中符合条件的第一个文档
-
返回的是一个文档对象
-
查询条件
$lt $lte $gt $gte $ne $or $in $nin $not $exists $and
小案例
案例1:查询user数据库,teacher集合中的所有文档
> db.teacher.find();
{ "_id" : ObjectId("5e0dddb98d578ff6fa9f2824"), "name" : "Chen", "age" : 45, "gender" : "male" }
{ "_id" : ObjectId("5e0dde228d578ff6fa9f2825"), "name" : "Wang", "age" : 30, "gender" : "female" }
{ "_id" : ObjectId("5e0dde228d578ff6fa9f2826"), "name" : "Li", "age" : 30, "gender" : "male" }
案例2:查询teacher集合中name是Chen的文档
> db.teacher.find({name:"Chen"});
{ "_id" : ObjectId("5e0dddb98d578ff6fa9f2824"), "name" : "Chen", "age" : 45, "gender" : "male" }
案例3:查询teacher集合中age是30的第一个的文档
> db.teacher.findOne({age:30});
{
"_id" : ObjectId("5e0dde228d578ff6fa9f2825"),
"name" : "Wang",
"age" : 30,
"gender": "female"
}
案例4:查询teacher集合中的文档数量
> db.teacher.find().count();
3
查询条件$lt $lte
// $lt 小于 $lte 小于等于
// 综合案例 20
查询条件$gt $gte
// $gt 大于 $gte 大于等于
// 综合案例 19
查询条件$or
// $or 或者,满足符合条件的任一要求即可
// 综合案例 29
修改文档
db..update(查询条件,新对象)
- 可以在update()中传递两个参数,一个旧文档,一个是新的文档,这样符合条件的文档将会被新文档所替换
- update()的第三个参数,用来指定是否使用upsert,默认为false
- update()的第四个参数,用来指定是否同时修改多个文档,默认为false
- 使用update会将整个文档替换,但是大部分情况下是不需要这么做的,只需要对文档中的一部分进行更新时,可以使用更新修改器来进行(案例中会有介绍)
db..updateMany()
- 同时修改多个符合条件的文档
db..updateOne()
- 修改一个符合条件的文档
db..replaceOne()
- 替换一个文档
小案例
案例1:修改teacher集合中,name为Wang的年龄为26
> db.teacher.update({name:"Wang"},{age:26});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.teacher.find({name:"Wang"});
> //查找不到,因为旧的对象被{age:26}替换了
案例2:更新修改器 $set
// $set 用来指定一个字段的值,如果这个字段不存在,则创建它
> db.teacher.update({name:"Li"},{$set:{age:35}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.teacher.find({name:"Li"});
{ "_id" : ObjectId("5e0dde228d578ff6fa9f2826"), "name" : "Li", "age" : 35, "gender" : "male" }
案例2:更新修改器 $unset
// $unset 用来删除文档中一个不需要的字段,用法和set类似
> db.teacher.insert({name:"Wang",age:28,gender:"female",address:"Jiangsu"});
WriteResult({ "nInserted" : 1 })
> db.teacher.update({name:"Wang"},{$unset:{address:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.teacher.find({name:"Wang"});
{ "_id" : ObjectId("5e0de7e88d578ff6fa9f2827"), "name" : "Wang", "age" : 28, "gender" : "female" }
更新修改器 $inc
// $inc 用来增加已有键的值,或者该键不存在那就创建一个,$inc只能用于Number类型的值
// 综合案例 33
更新修改器 $push
// $push 向到数组中添加一个新的元素,元素可以重复
// 综合案例 14
更新修改器 $addToSet
// $addToSet 向数组中添加一个新元素,如果数组不存在则创建数组,如果数组中已经存在了该元素,则该元素不会被添加。元素不可以重复
删除文档
一般数据库中的数据不会被删除,所以删除的方法很少调用
一般会在数据中添加一个字段,来表示数据是否被删除
db..remove()
- remove()可以用来移除指定文档对象
- 方法接收一个查询文档作为参数,只有符合条件的文档才会被删除,默认会删除所有符合条件的文档
- 第二个参数可以设置为只删除一个符合条件的文档,默认为false,删除全部符合条件的文档
- 如果条件为空,则会删除集合下所有文档
- 删除数据是永久的,不能撤销
db..deleteOne()
- 删除单个文档
db..deleteMany()
- 删除多个文档
db..drop()
- 删除集合
小案例
案例1:删除teacher集合中age为26的文档
> db.teacher.remove({age:26})
WriteResult({ "nRemoved" : 1 })
> db.teacher.find()
{ "_id" : ObjectId("5e0dddb98d578ff6fa9f2824"), "name" : "Chen", "age" : 45, "gender" : "male" }
{ "_id" : ObjectId("5e0dde228d578ff6fa9f2826"), "name" : "Li", "age" : 35, "gender" : "male" }
{ "_id" : ObjectId("5e0de7e88d578ff6fa9f2827"), "name" : "Wang", "age" : 28, "gender" : "female" }
案例2:清空集合(性能较差)
> db.teacher.remove({});
WriteResult({ "nRemoved" : 3 })
> db.teacher.find();
案例3:删除teacher集合
> db.teacher.drop();
true
> show collections
stus
案例4:删除数据库
> db.dropDatabase();
综合案例
//1.进入my_test数据库
> use my_test;
//2.向数据库的user集合中插入一个文档
> db.user.insert({name:"Wang"});
//3.查询user集合中的文档
> db.user.find();
//4.向数据库的user集合中插入一个文档
> db.user.insert({name:"Zhang"})
//5.查询数据库user集合中的文档
> db.user.find();
//6.统计数据库user集合中的文档数量
> db.user.find().count();
//7.查询数据库user集合中name为Wang的文档
> db.user.find({name:"Wang"});
//8.向数据库user集合中的name为Wang的文档,添加一个age属性,属性值为26
> db.user.update({name:"Wang"},{age:26});
//9.使用{name:"Shang"} 替换 name 为 Zhang的文档
> db.user.replaceOne({name:"Zhang"},{$set:{name:"Shang"}});
//10.删除name为Wang的文档的age属性
> db.user.update({name:"Wang"},{$unset:{age:1}});
//11.向name为Wang的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
> db.user.update({name:"Wang"},{$set:{hobby:city:["beijing","shanghai","shenzhen"],movies:["sanguo","hero"]}});
//12.向name为Shang的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
> db.user.update({name:"Shang"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}});
//13.查询喜欢电影hero的文档
> db.user.find("hobby.movies":"hero");
//14.向Shang中添加一个新的电影Interstellar
> db.user.update({name:"Shang"},{$push:{"hobby.movies":"Interstellar"}});
//15.删除喜欢beijing的用户
> db.user.remove({"hobby.cities":"beijing"});
//16.删除user集合
> db.user.remove({});//清空集合
> db.user.drop();//会删除数据库与集合
//17.向numbers中插入20000条数据 7.2s
for(var i=1;i<=20000;i++){
db.numbers.insert({num:i})};
}
//优化:0.4s
var arr=[];
for(var i=1;i<=20000;i++){
arr.push({num:i});
}
db.numbers.insert(arr);
//18.查询numbers中num为500的文档
> db.numbers.find({num:500});
//19.查询numbers中num大于5000的文档
> db.numbers.find({num:{$gt:500});
//20.查询numbers中num小于30的文档
> db.numbers.find({num:{$lt:30}});
//21.查询numbers中num大于40小于50的文档
> db.numbers.find({num:{$gt:40,$lt:50}});
//22.查询numbers中num大于19996的文档
> db.numbers.find({num:{$gt:19996}});
//23.查看numbers集合中的前10条数据
//limit()设置显示数据的上限
> db.numbers.find().limit(10);
//24.查看numbers集合中的第11条到20条数据
// skip()用于跳过指定数量的数据
// 分页:skip((页码-1)*每页显示的条数).skip(每页显示的条数);
// MongoDB会自动调整skip和limit的位置
> db.numbers.find().skip(10).limit(10);
//25.查看numbers集合中的第21条到30条数据
> db.numbers.find().skip(20).limit(10);
//26.将dept和emp集合导入到数据库中
图形化界面可以通过右键导入文件
//27.查询工资小于2000的员工
> db.emp.find({sal:{$lt:2000}});
//28.查询工资在1000-2000之间的员工
> db.emp.find({sal:{$lt:2000,$gt:1000}});
//29.查询工资小于1000或大于2500的员工
> db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2000}}]});
//30.查询财务部的所有员工
// 获取财务部的编号
> var depno = db.dept.findOne({dname:"财务部"}).deptno;
// 查询财务部的所有员工
> db.emp.find({depno:depno});
//31.查询销售部的所有员工
// 获取销售部的编号
> var depno = db.dept.findOne({dname:"销售部"}).deptno;
// 查询销售部的所有员工
> db.emp.find({depno:depno});
//32.查询所有mgr为7698的所有员工
> db.emp.find({mgr:7698});
//33.为所有薪资低于1000的员工增加工资400元
> db.emp.updateMany({sal:{$lte:1000},{$inc:{sal:400}}})
暂时先这样吧,最近可能得忙着毕设,有些过错,这段时间过后我会好好弥补。
ind({sal:{ l t : 2000 , lt:2000, lt:2000,gt:1000}});
//29.查询工资小于1000或大于2500的员工
db.emp.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{sal:{lt:1000}},{sal:{$gt:2000}}]});
//30.查询财务部的所有员工
// 获取财务部的编号
var depno = db.dept.findOne({dname:“财务部”}).deptno;
// 查询财务部的所有员工
db.emp.find({depno:depno});
//31.查询销售部的所有员工
// 获取销售部的编号
var depno = db.dept.findOne({dname:“销售部”}).deptno;
// 查询销售部的所有员工
db.emp.find({depno:depno});
//32.查询所有mgr为7698的所有员工
db.emp.find({mgr:7698});
//33.为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{KaTeX parse error: Expected 'EOF', got '}' at position 9: lte:1000}̲,{inc:{sal:400}}})
暂时先这样吧,最近可能得忙着毕设,有些过错,这段时间过后我会好好弥补。
共勉。