Mongodb
Mongodb 是一个 NoSql 的数据库 Mongodb 是一个文档型数据库 数据库是指一个存储数据的仓库,数据库可以使我们完成对数据持久化的操作 Mongodb 数据库中存储的数据的基本单元就是文档,所谓文档就是一个
JSONMongodb 中的JSON称为 BSON, 比普通的 json 的功能要更加强大 Mongodb 数据库使用的 javascript 来进行操作的,在 Mongodb 含有一个对 ES 的标准引擎。
数据库安装
- mongodb安装和 mongosh 安装启动
- 设置 mongodb 数据存储地址
sudo mongod --dbpath=/data/db
数据库操作
-
启动服务器
mongod --dbpath 路径 --port 端口号
-
启动客户端
mongosh
-
Mongodb 的 CURD 基本操作
- use 数据库: 进入指定的数据库
- show dbs: 显示所有的数据库
- show collections: 显示数据库中所有集合
- db: 显示当前所在的数据库
-
插入文档操作
- db.colloection.insert(): 可以像集合中插入一个或多个文档
db.stu.insert({name: "小明", age: 12, sex: "男"})
- db.collection.insertOne(): 向集合中插入一个文档
- db.collection.insertMany(): 向集合中插入多个文档
- db.colloection.insert(): 可以像集合中插入一个或多个文档
-
查询文档的操作
- db.colloection.find(): 可以根据条件从集合中查询所有符合条件的文档, 返回一个数组
- db.colloection.findOne(): 查询第一条符合条件的文档,返回一个对象
- db.colloection.find().count(): 查询符合条件的文档数量
-
修改文档的操作
- db.colloection.update(): 可以修改,替换集合中的一个或多个文档
- db.colloection.updateOne(): 修改集合中的一个文档
- db.colloection.updateMany(): 修改集合中的多个文档
- db.colloection.replaceOne(): 替换集合中的一个文档
-
删除集合中的文档
- db.collection.remove(): 删除集合中的一个或多个文档
- db.collection.deleteOne(): 删除集合中的一个文档
- db.collection.deleteMany(): 删除集合中的多个文档
- db.collection.remove({}): 清空一个集合
- db.collection.drop(): 删除一个集合
- db.dropDatabase(): 删除一个数据库
-
操作集合中的操作符
- $set: 添加对应属性
- $unset(1): 删除属性
- $push: 添加数组元素,可以是重复的
- $addToSet: 不重复添加数组元素
- $gt:
- $lt
- $eq
- $lte
- $gte
- skip limit 查询条件
-
基础练习
题目:
1.进入my_test数据库
use my_test
2.向数据库的user集合中插入一个文档
db.user.insert({username:"sunwukong"})
3.查询user集合中的文档
db.user.find()
4.向数据库的user集合中插入一个文档
db.user.insert({username:"zhubajie"})
5.查询数据库user集合中的文档
db.user.find()
6.统计数据库user集合中的文档数量
db.user.find().count()
7.查询数据库user集合中username为sunwukong的文档
db.user.find({username:"sunwukong"})
8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.user.update({username:"sunwukong"},{$set:{address:"huaguoshan"}})
9.使用{username:"tangseng"} 替换 username 为 zhubajie的文档
db.user.update({username:"tangseng"},{username:"zhubajie"})
db.user.update({username:"zhubajie"},{username:"tangseng"})
db.user.find()
db.user.replaceOne({username:"tangseng"},{username:"tangseng"})
db.user.find()
10.删除username为sunwukong的文档的address属性
db.user.update({username:"sunwukong"},{$unset:{address:1}})
db.user.find()
11.username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
db.user.update({username:"sunwukong"},{$set:{
hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
}})
12.向username为tangseng的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
db.user.update({username:"sunwukong"},{$set:{
hobby:{movies:["A Chinese Odyssey","King of comedy"]}
}})
db.user.find()
13.查询喜欢电影hero的文档
db.user.find({'hobby.movies':"hero"})
db.user.find()
14.向tangseng中添加一个新的电影Interstellar
db.user.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}})
$push 表示的是插入一个元素到数组(重复的也继续插入)
db.user.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}})
$addToSet //插入一个元素去数组不重复的
15.删除喜欢beijing的用户
db.users.remove({"hobby.cities":"beijing"});
16.删除user集合
db.users.remove({});
db.users.drop();
show dbs;
17.向numbers中插入20000条数据
18.查询numbers中num为500的文档
db.numbers.find({num:500})
19.查询numbers中num大于5000的文档
db.numbers.find({num:{$gt:500}});
db.numbers.find({num:{$eq: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条数据
db.numbers.find({num:{$lte:10}});
limit()设置显示数据的上限
db.numbers.find().limit(10);
在开发时,我们绝对不会执行不带条件的查询
db.numbers.find();
24.查看numbers集合中的第11条到20条数据
/*
分页 每页显示10条
1-10 0
11-20 10
21-30 20
。。。
skip((页码-1) * 每页显示的条数).limit(每页显示的条数);
skip()用于跳过指定数量的数据
MongoDB会自动调整skip和limit的位置
*/
db.numbers.find().skip(10).limit(10);
25.查看numbers集合中的第21条到30条数据
db.numbers.find().skip(20).limit(10);
db.numbers.find().limit(10).skip(10);
26.将dept和emp集合导入到数据库中
db.dept.find()
db.emp.find()
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:2500}}]});
30.查询财务部的所有员工
//(depno)
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}});
db.emp.find()