目录
实战一:
1、 string类型数据的命令操作:
(1) 设置键值:
(2) 读取键值:
(3) 数值类型自增1:
(4) 数值类型自减1:
(5) 查看值的长度:
2、 list类型数据的命令操作:
(1)对列表city插入元素:Shanghai Suzhou Hangzhou
(2)将列表city里的头部的元素移除
(3)将name列表的尾部元素移除到number列表的头部
(4) 对一个已存在的列表插入新元素
(5)查看list的值长度
3、 hash类型数据的命令操作:
(1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三
(2) 创建一个hash表,表里的键值批量插入
(3) 获取order对应的map的所有key
(4) 获取order对应的map的键值数量
(5) 获取order表里的id值
4、Keys相关的命令操作
(1) 查看key是否存在
(2) 查找满足pattern的keys
(3) 查看key的超时时间
(4) 遍历key
实战二:
举例说明list和hash的应用场景,每个至少一个场景
list:
hash:
mongodb实战:
1. 创建一个数据库 名字grade
2. 数据库中创建一个集合名字 class
3. 集合中插入若干数据 文档格式如下
4. 查找
查看班级所有人信息
查看班级中年龄为8岁的学生信息
查看年龄大于10岁的学生信息
查看年龄在 4---8岁之间的学生信息
找到年龄为6岁且为男生的学生
找到年龄小于7岁或者大于10岁的学生
找到年龄是8岁或者11岁的学生
找到兴趣爱好有两项的学生
找到兴趣爱好有draw的学生
找到既喜欢画画又喜欢跳舞的学生
统计爱好有三项的学生人数
找出本班年龄第二大的学生
查看学生的兴趣范围
将学生按年龄排序找到年龄最大的三个
删除所有 年级大于12或者小于4岁的学生
5. 增加、更新、删除、统计
1. 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
2. 追加小明兴趣爱好 唱歌
3. 小王兴趣爱好增加 吹牛 打篮球
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
5. 该班所有同学年龄加1
6. 删除小明的sex属性
7. 删除小李兴趣中的第一项
8. 将小红兴趣中的画画爱好删除
6. 增加分数域
1. 按照性别分组统计每组人数
2. 按照姓名分组,过滤出有重名的同学
3. 统计每名男生的语文成绩
4. 将女生按照英语分数降序排列
实战一:
string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
注:登录时使用--raw,就能中文输入否则会出现乱码。
1、 string类型数据的命令操作:
(1) 设置键值:
set str 66
(2) 读取键值:
get str
(3) 数值类型自增1:
incr str
(4) 数值类型自减1:
decr str
(5) 查看值的长度:
strlen str
结果如下:
2、 list类型数据的命令操作:
(1)对列表city插入元素:Shanghai Suzhou Hangzhou
lpush city shanghai suzhou hangzhou
(2)将列表city里的头部的元素移除
lpop city
(3)将name列表的尾部元素移除到number列表的头部
lpush name zhangsan lisi wangwu #创建name
rpoplpush name number #移动
(4) 对一个已存在的列表插入新元素
rpushx city chongqing
(5)查看list的值长度
127.0.0.1:6379> llen city
(integer) 3
127.0.0.1:6379> llen name
(integer) 2
127.0.0.1:6379> llen number
(integer) 1
127.0.0.1:6379>
3、 hash类型数据的命令操作:
(1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三
hmset order id 1 customer_name "zhangsan"
(2) 创建一个hash表,表里的键值批量插入
hmset gagale name lisi age 66 gender nan
(3) 获取order对应的map的所有key
hkeys order
(4) 获取order对应的map的键值数量
hvals order
(5) 获取order表里的id值
hmget order id
4、Keys相关的命令操作
(1) 查看key是否存在
exists name
(2) 查找满足pattern的keys
keys n*
(3) 查看key的超时时间
PTTL:是以毫秒为单位显示
TTL:是以秒为单位显示
pttl cityttl city
(4) 遍历key
scan 0 scan 0 match n*scan 0 match n* count 1
实战二:
举例说明list和hash的应用场景,每个至少一个场景
list:
List类型一般用于关注人、简单队列等。
List的应用场景-消息队列(Message Queue):
List适用于构建简单的消息队列,特别是在需要处理实时或异步任务时。你可以使用List的左侧(或右侧)作为队列的入口,将消息按照一定的顺序添加到List中。消费者可以从List的右侧(或左侧)获取消息,并在处理后将其移除。这样可以实现基本的消息发布和订阅模式。
hash:
Hash类型一般用于存储用户信息、用户主页访问量、组合查询等。
Hash的应用场景-用户存储及缓存:
Hash适用于存储和缓存复杂的数据结构,如用户信息。你可以使用Hash来存储用户的属性和相应的值。每个用户可以被表示为一个独立的Hash对象,可以很方便地进行获取、更新和查询用户属性。
mongodb实战:
1. 创建一个数据库 名字grade
use grade
2. 数据库中创建一个集合名字 class
db.createCollection("class")
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw sing dance basketball football pingpong computer
db.class.insertMany([{name: 'xiaohong', age: 7, sex: 'F', hobby: ['draw', 'dance']},{name: 'xiaoming', age: 8, sex: 'M', hobby: ['sing', 'basketball']},{name: 'xiaowang', age: 10, sex: 'M', hobby: ['pingpong', 'computer']},{name: 'xiaoli', age: 6, sex: 'M', hobby: ['draw', 'football']},{name: 'zhangsan', age: 11, sex: 'M', hobby: ['dance', 'basketball']},{name: 'lisi', age: 9, sex: 'M', hobby: ['draw', 'sing', 'dance']},{name: 'wangwu', age: 7, sex: 'F', hobby: ['pingpong', 'draw']},{name: 'zhaoliu', age: 12, sex: 'M', hobby: ['football', 'computer']},{name: 'xiaoqi', age: 5, sex: 'F', hobby: ['sing']},{name: 'xiaoba', age: 8, sex: 'F', hobby: ['draw', 'dance']}
]);
4. 查找
查看班级所有人信息
db.class.find()
查看班级中年龄为8岁的学生信息
db.class.find({age:8})
查看年龄大于10岁的学生信息
db.class.find({age:{$gt:10}})
查看年龄在 4---8岁之间的学生信息
db.class.find({age:{$gt:4,$lt:8}})
找到年龄为6岁且为男生的学生
db.class.find({age:6,sex:"M"})
找到年龄小于7岁或者大于10岁的学生
db.class.find({ $or: [ { age: { $lt: 7 } }, { age: { $gt: 10 } } ] });
找到年龄是8岁或者11岁的学生
db.class.find({$or:[{age:8},{age:11}]});
找到兴趣爱好有两项的学生
在MongoDB中,你可以使用查询操作符 $size
来查找具有指定长度的数组字段。
db.class.find({ hobby: { $size: 2 } });
找到兴趣爱好有draw的学生
db.class.find({ hobby:"draw" });
找到既喜欢画画又喜欢跳舞的学生
db.class.find({$and:[ {hobby:"draw"},{hobby:"dance"}] });
统计爱好有三项的学生人数
db.class.find({ hobby: { $size: 3 } }).count();
找出本班年龄第二大的学生
db.class.find().sort({age:-1}).skip(1).limit(1);
查看学生的兴趣范围
db.class.find({}, { "_id": 0, "hobby": 1 });
将学生按年龄排序找到年龄最大的三个
db.class.find().sort({age:-1}).limit(3);
删除所有 年级大于12或者小于4岁的学生
> db.class.deleteMany({ $or: [ { grade: { $gt: 12 } }, { age: { $lt: 4 } } ] });
> db.class.remove({ $or: [ { grade: { $gt: 12 } }, { age: { $lt: 4 } } ] });
5. 增加、更新、删除、统计
1. 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
db.class.update({name:"xiaohong"},
... {$set:{age:8,hobby:["dance","draw"]}});
2. 追加小明兴趣爱好 唱歌
db.class.update({name:"xiaoming"}, {$push:{hobby:"sing"}});
3. 小王兴趣爱好增加 吹牛 打篮球
db.class.update({name:"xiaowang"}, {$push:{hobby:["basketball","brag"]}});
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
注:这里因为我自己的素材没有重复所以增加了篮球和画画
db.class.update({name:"xiaoli"}, {$addToSet:{hobby:{$each:["basketball","draw"]}}});
5. 该班所有同学年龄加1
db.class.updateMany({},{$inc:{age: 1 }} );
6. 删除小明的sex属性
db.class.update({name:"xiaoming"},{$unset:{sex:""}})
7. 删除小李兴趣中的第一项
db.class.update({name:'xiaoli'},{$pop:{hobby:-1}});
8. 将小红兴趣中的画画爱好删除
db.class.update({name:'xiaohong'},{$pull:{hobby:'draw'}});
6. 增加分数域
score:{'chinese':88,'english':78,'math':98}
注:这里因为忘了保存所以再次插入了数据。
db.class.insertMany([
{name: 'xiaohong', age: 7, sex: 'F', hobby: ['draw', 'dance'], score: {chinese: 91, english: 78, math: 85}},
{name: 'xiaoming', age: 8, sex: 'M', hobby: ['sing', 'basketball'], score: {chinese: 90, english: 85, math: 73}},
{name: 'xiaowang', age: 10, sex: 'M', hobby: ['pingpong', 'computer'], score: {chinese: 77, english: 92, math: 81}},
{name: 'xiaoli', age: 6, sex: 'M', hobby: ['draw', 'football'], score: {chinese: 88, english: 94, math: 67}},
{name: 'zhangsan', age: 11, sex: 'M', hobby: ['dance', 'basketball'], score: {chinese: 79, english: 82, math: 88}},
{name: 'lisi', age: 9, sex: 'M', hobby: ['draw', 'sing', 'dance'], score: {chinese: 93, english: 71, math: 97}},
{name: 'wangwu', age: 7, sex: 'F', hobby: ['pingpong', 'draw'], score: {chinese: 86, english: 90, math: 79}},
{name: 'zhaoliu', age: 12, sex: 'M', hobby: ['football', 'computer'], score: {chinese: 80, english: 83, math: 92}},
{name: 'xiaoqi', age: 5, sex: 'F', hobby: ['sing'], score: {chinese: 75, english: 87, math: 84}},
{name: 'xiaoba', age: 8, sex: 'F', hobby: ['draw', 'dance'], score: {chinese: 94, english: 76, math: 89}}
]);
1. 按照性别分组统计每组人数
db.class.aggregate([{$group:{_id: "$sex",count:{$sum:1}}}])
2. 按照姓名分组,过滤出有重名的同学
注:因为没有重名的同学所以将xiaoqi改成了小红
db.class.update({name:"xiaoba"},{$set:{name:'xiaohong'}});
> db.class.aggregate([{$group: {_id:"$name",count: { $sum: 1 },names: { $push: "$name" }}}, {$match: {count: {$gt: 1 } } } ])
3. 统计每名男生的语文成绩
db.class.aggregate([{$match: {sex: "M"}},{$group: {_id: "$name",chineseScore: { $first: "$score.chinese" }}}])
4. 将女生按照英语分数降序排列
db.class.aggregate([{$match: {sex: "F"}},{$sort:{"score.english":-1}}])