作业一:string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
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
string类型数据的命令操作:
# 设置键值
SET mykey "Hello"
# 读取键值
GET mykey
# 数值类型自增1
INCR mynumber
# 数值类型自减1
DECR mynumber
# 查看值的长度
STRLEN mykey
list类型数据的命令操作:
# 对列表city插入元素:Shanghai Suzhou Hangzhou
RPUSH city Shanghai Suzhou Hangzhou
# 将列表city里的头部的元素移除
LPOP city
# 将name列表的尾部元素移除到number列表的头部
RPOPLPUSH name number
# 对一个已存在的列表插入新元素
LPUSH mylist "New Element"
# 查看list的值长度
LLEN mylist
hash类型数据的命令操作:
# 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三
HSET order id 1 customer_name "张三"
# 创建一个hash表,表里的键值批量插入
HMSET order id 1 customer_name "张三" order_date "2023-07-17"
# 获取order对应的map的所有key
HKEYS order
# 获取order对应的map的键值数量
HLEN order
# 获取order表里的id值
HGET order id
Keys相关的命令操作:
# 查看key是否存在
EXISTS mykey
# 查找满足pattern的keys
KEYS pattern*
# 查看key的超时时间
TTL mykey
# 遍历key
SCAN 0
作业二:举例说明list和hash的应用场景,每个至少一个场景
mongodb作业
1. 创建一个数据库 名字grade
use grade
2. 数据库中创建一个集合名字 class
db.createCollection("class")
3. 集合中插入若干数据 文档格式如下
db.class.insertMany([
{
name: 'zhang',
age: 10,
sex: 'm',
hobby: ['a', 'b', 'c']
},
// 插入其他学生的数据
])
4. 查找
查看班级所有人信息
db.class.find()
查看班级中年龄为8岁的学生信息
db.class.find({ age: 8 })
查看年龄大于10岁的学生信息
db.class.find({ age: { $gt: 10 } })
查看年龄在4到8岁之间的学生信息:
db.class.find({ age: { $gte: 4, $lte: 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({ age: { $in: [8, 11] } })
找到兴趣爱好有两项的学生:
db.class.find({ hobby: { $size: 2 } })
找到兴趣爱好有draw的学生:
db.class.find({ hobby: 'draw' })
找到既喜欢画画又喜欢跳舞的学生:
db.class.find({ hobby: { $all: ['draw', 'dance'] } })
统计爱好有三项的学生人数:
db.class.find({ hobby: { $size: 3 } }).count()
找出本班年龄第二大的学生:
db.class.find().sort({ age: -1 }).limit(1).skip(1)
查看学生的兴趣范围:
db.class.distinct("hobby")
将学生按年龄排序找到年龄最大的三个:
db.class.find().sort({ age: -1 }).limit(3)
删除所有年龄大于12或者小于4岁的学生:
db.class.deleteMany({ $or: [{ age: { $gt: 12 } }, { age: { $lt: 4 } }] })
5. 增加、更新、删除、统计
将小红的年龄变为8岁,兴趣爱好变为跳舞和画画:
db.class.updateOne({ name: '小红' }, { $set: { age: 8, hobby: ['跳舞', '画画'] } })
追加小明兴趣爱好"唱歌":
db.class.updateOne({ name: '小明' }, { $push: { hobby: '唱歌' } })
小王兴趣爱好增加"吹牛"和"打篮球":
db.class.updateOne({ name: '小王' }, { $addToSet: { hobby: { $each: ['吹牛', '打篮球'] } } })
小李增加爱好"跑步"和"唱歌",但不重复已有的兴趣爱好:
db.class.updateOne({ name: '小李' }, { $addToSet: { hobby: { $each: ['跑步', '唱歌'] } } })
该班所有同学年龄加1:
db.class.updateMany({}, { $inc: { age: 1 } })
删除小明的sex属性:
db.class.updateOne({ name: '小明' }, { $unset: { sex: '' } })
删除小李兴趣中的第一项:
db.class.updateOne({ name: '小李' }, { $pop: { hobby: -1 } })
将小红兴趣中的"画画"爱好删除:
db.class.updateOne({ name: '小红' }, { $pull: { hobby: '画画' } })
增加分数域score: {'chinese': 88, 'english': 78, 'math': 98}:
db.class.updateOne({ name: '小明' }, { $set: { score: { 'chinese': 88, 'english': 78, 'math': 98 } } })
按照性别分组统计每组人数:
db.class.aggregate([
{ $group: { _id: '$sex', count: { $sum: 1 } } }
])
按照姓名分组,过滤出有重名的同学:
db.class.aggregate([
{ $group: { _id: '$name', count: { $sum: 1 } } },
{ $match: { count: { $gt: 1 } } }
])
统计每名男生的语文成绩:
db.class.aggregate([
{ $match: { sex: 'm' } },
{ $project: { _id: 0, name: 1, chinese: '$score.chinese' } }
])
将女生按照英语分数降序排列:
db.class.aggregate([
{ $match: { sex: 'f' } },
{ $sort: { 'score.english': -1 } }
])