作业一:string list hash结构中,每个至少完成5个命令,
包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
1、 string类型数据的命令操作:
(1) 设置键值:
127.0.0.1:6379> set name hamu //设置键name的值为'hamu'
OK
(2) 读取键值:
127.0.0.1:6379> get name //获取键'name'的值
"hamu"
(3) 数值类型自增1:
127.0.0.1:6379> set name1 1 //设置键name1 值为 1
OK
127.0.0.1:6379> get name1
"1"
127.0.0.1:6379> incr name1 //设置键name1自增
(integer) 2
(4) 数值类型自减1:
127.0.0.1:6379> decr name1 //设置键name1 自减
(integer) 1
(5) 查看值的长度:
127.0.0.1:6379> strlen name1
(integer) 1
127.0.0.1:6379> strlen name
(integer) 4
2、 list类型数据的命令操作:
(1)对列表city插入元素:Shanghai Suzhou Hangzhou
127.0.0.1:6379> lpush city Shanghai Suzhou Hangzhou //插入元素shanghai suzhou hangzhou
(integer) 3
127.0.0.1:6379> lrange city 0 -1 //将返回列表"city"中的所有元素
1) "Hangzhou"
2) "Suzhou"
3) "Shanghai"
(2)将列表city里的头部的元素移除
127.0.0.1:6379> lpop city //移除并返回列表的头部元素
"Hangzhou"
127.0.0.1:6379> lrange city 0 -1
1) "Suzhou"
2) "Shanghai"
(3)将name列表的尾部元素移除到number列表的头部
127.0.0.1:6379> rpoplpush city haha //将列表city的尾部元素移除并添加到haha列表的头部
"Shanghai"
127.0.0.1:6379> lrange haha 0 -1
1) "Shanghai"
2) "c"
3) "b"
4) "a"
(4) 对一个已存在的列表插入新元素
127.0.0.1:6379> rpush city Chongqing //将元素"Chongqing"插入到列表"city"的尾部。
(integer) 2
127.0.0.1:6379> lrange city 0 -1
1) "Suzhou"
2) "Chongqing"
(5)查看list的值长度
127.0.0.1:6379> llen city
(integer) 2
3、 hash类型数据的命令操作:
(1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三
127.0.0.1:6379> hset order id 1
(integer) 1
127.0.0.1:6379> hset order customer_name 张三
(integer) 1
(2) 创建一个hash表,表里的键值批量插入
127.0.0.1:6379> hmset order id 2 customer_name 李四
OK
(3) 获取order对应的map的所有key
127.0.0.1:6379> HKEYS order
1) "id"
2) "customer_name"
(4) 获取order对应的map的键值数量
127.0.0.1:6379> HLEN order
(integer) 2
(5) 获取order表里的id值
127.0.0.1:6379> hget order id
"2"
4、Keys相关的命令操作
(1) 查看key是否存在
127.0.0.1:6379> exists name //检查给定的key是否存在于数据库中,存在为1,不存在为0
(integer) 1
(2) 查找满足pattern的keys
127.0.0.1:6379> keys pattern
(empty list or set)
127.0.0.1:6379> keys name
1) "name"
127.0.0.1:6379> keys nama1
(empty list or set)
127.0.0.1:6379> keys order
1) "order"
(3) 查看key的超时时间
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl name1
(integer) -1
127.0.0.1:6379> ttl order
(integer) -1
//TTL keyname,返回以秒为单位的key的剩余生存时间,
-1表示永久存在,-2表示key不存在。
(4) 遍历key
127.0.0.1:6379> scan 0
1) "0"
2) 1) "city"
2) "order"
3) "name"
4) "name1"
5) "haha"
//使用游标为0的位置开始扫描数据库中的键
举例说明list和hash的应用场景,每个至少一个场景
List的应用场景:
待办事项列表:使用List来管理待办事项,每个事项作为列表的一个元素,可以按照添加顺序进行排序和处理。
例如:用户可以将需要完成的任务添加到待办事项列表中,然后依次处理每个事项,将完成的事项从列表中移除。
Hash的应用场景:
用户身份信息存储:使用Hash来存储用户的身份信息,例如用户名、密码、电子邮件等,以便进行身份验证和用户管理。
例如:在一个Web应用程序中,可以使用Hash来存储用户的身份信息,通过用户名作为Key,包含密码、电子邮件等信息的Field和Value来索引和存储用户的身份数据。
1. 创建一个数据库 名字grade
MongoDB Enterprise > use grade
switched to db grade
//创建数据库,如果没有则创建,否则切换到数据库
2. 数据库中创建一个集合名字 class
MongoDB Enterprise > db.createCollection("class")
{ "ok" : 1 }
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw sing dance basketball football pingpong computer
MongoDB Enterprise > db.calss.insertMany([
... {name:'zhang' ,age:10 ,sex:'m' ,hobby:['a','b','c'] },
... {name:'lisi' ,age:12,sex:'f' ,hobby:['draw','sing','dance'] },
... {name:'wangwu' ,age:8,sex:'m' ,hobby:['basketball'] },
... {name:'dingzhen' ,age:16 ,sex:'m' ,hobby:['football','pingpong','computer'] }
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("64b5e5250b42d51f6f17ba20"),
ObjectId("64b5e5250b42d51f6f17ba21"),
ObjectId("64b5e5250b42d51f6f17ba22"),
ObjectId("64b5e5250b42d51f6f17ba23")
]
}
Mon
4.查找
查看班级所有人信息
db.calss.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: { $gt: 10 } },
{ age: { $lt: 7 } }
]
})
找到年龄是8岁或者11岁的学生
db.class.find({
$or:[
{age:8},
{age: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}.skip(1)).limit(1)
查看学生的兴趣范围
db.class.distinct('hobby')
将学生按年龄排序找到年龄最大的三个
db.class.find({}).sort({age:-1}).limit(3)
删除所有 年级大于12或者小于4岁的学生
db.class.remove({&or: [{age: {$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"},{$pushAll:{hobby:['吹牛','basketball']}})
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
db.class.update({name:"xiaoli"},{$addToSet:{hobby:{$each:['running','sing']}}})
5. 该班所有同学年龄加1
db.class.update({},{$inc:{age:1}},false,true)
6. 删除小明的sex属性
db.class.update({name:"xiaoming"},{$unset:{sex:0}})
7. 删除小李兴趣中的第一项
db.class.update({name:"xiaoli"},{$pop:{hobby:-1}})
8. 将小红兴趣中的画画爱好删除
db.class.update({name:"xiaohong"},{$pull:{hobby:'draw'}})
增加分数域 score:{'chinese':88,'english':78,'math':98}
MongoDB Enterprise > db.class.insert({score:{'chinese':88,'english':78,'math':98}})
WriteResult({ "nInserted" : 1 })
1. 按照性别分组统计每组人数
db.class.aggregate({$group:{_id:'$sex',num:{$sum:1}}})
2. 按照姓名分组,过滤出有重名的同学
db.class.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])
3. 统计每名男生的语文成绩
db.class.aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])
4. 将女生按照英语分数降序排列
db.class.aggregate([{$match:{sex:'f'}},{$sort:{'score.english':-1}}])