nosql

文章介绍了stringlisthash结构中的命令操作,包括设置、读取、增删查改等,以及list和hash在消息队列和用户信息存储中的应用场景。同时,文章提供了MongoDB数据库的操作示例,如创建数据库、集合,插入数据,以及各种查询和更新操作。
摘要由CSDN通过智能技术生成

1、string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
    1、 string类型数据的命令操作:
    (1) 设置键值:SET key value
    (2) 读取键值:GET key
    (3) 数值类型自增1:INCR key
    (4) 数值类型自减1:DECR key
    (5) 查看值的长度:STRLEN key

2、 list类型数据的命令操作:
    (1)对列表city插入元素:LPUSH city Shanghai Suzhou Hangzhou
    (2)将列表city里的头部的元素移除:LPOP city
    (3)将name列表的尾部元素移除到number列表的头部:RPOPLPUSH name number
    (4) 对一个已存在的列表插入新元素:RPUSH city Beijing
    (5)查看list的值长度:LLEN city

3、 hash类型数据的命令操作:
     (1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三:HSET order id 1, customer_name 张三
    (2) 创建一个hash表,表里的键值批量插入:HMSET order id 1 customer_name 张三
    (3) 获取order对应的map的所有key:HKEYS order
    (4) 获取order对应的map的键值数量:HLEN order
    (5) 获取order表里的id值:HGET order id
    
    4、Keys相关的命令操作
    (1) 查看key是否存在:EXISTS key
    (2) 查找满足pattern的keys:KEYS pattern
    (3) 查看key的超时时间:TTL key
    (4) 遍历key:SCAN cursor [MATCH pattern] [COUNT count]

举例说明list和hash的应用场景,每个至少一个场景

List的应用场景:

  1. 消息队列:List可以作为一个简单而有效的消息队列,其中每个元素代表一个消息。新的消息可以通过LPUSH命令添加到List的头部,而消费者可以使用RPOP命令从尾部获取消息,实现先进先出的消息处理。

  2. 最近联系人列表:List可以用于保存用户的最近联系人列表,在每次用户进行联系时,可以使用LPUSH命令将联系人添加到列表的头部。这样,最近联系人就会按照最新的联系时间排在最前面,便于快速访问。

Hash的应用场景:

  1. 用户信息存储:Hash适合用于存储和检索用户的信息。每个用户可以通过一个Hash对象表示,其中每个字段表示一个用户属性(如姓名、年龄、地址等),而字段的值表示对应属性的值(例如,Bob、25岁、New York)。

  2. 商品缓存:Hash可以用于存储和更新商品的缓存信息。例如,一个电子商务网站可以使用一个Hash对象来表示每个商品,每个字段表示一个属性(如价格、库存、描述等)。当商品信息发生变化时,可以使用HSET命令更新对应字段的值,从而实现快速的商品缓存更新。

mongodb作业

1. 创建一个数据库 名字grade
2. 数据库中创建一个集合名字 class
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw  sing  dance  basketball football  pingpong  computer

db.class.insertMany([
  {name: 'zhang', age: 10, sex: 'm', hobby: ['a', 'b', 'c']},
  {name: 'li', age: 8, sex: 'f', hobby: ['draw', 'sing', 'dance']},
  {name: 'wang', age: 12, sex: 'm', hobby: ['basketball', 'football', 'pingpong', 'computer']},
  {name: 'zhao', age: 6, sex: 'm', hobby: ['draw']}
])

4. 查找
查看班级所有人信息
查看班级中年龄为8岁的学生信息
查看年龄大于10岁的学生信息
查看年龄在 4---8岁之间的学生信息
找到年龄为6岁且为男生的学生
找到年龄小于7岁或者大于10岁的学生
找到年龄是8岁或者11岁的学生
找到兴趣爱好有两项的学生
找到兴趣爱好有draw的学生
找到既喜欢画画又喜欢跳舞的学生
统计爱好有三项的学生人数
找出本班年龄第二大的学生
查看学生的兴趣范围
将学生按年龄排序找到年龄最大的三个
删除所有 年级大于12或者小于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}).skip(1).limit(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. 增加、更新、删除、统计
1. 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
2. 追加小明兴趣爱好  唱歌
3. 小王兴趣爱好增加  吹牛 打篮球
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
5. 该班所有同学年龄加1
6. 删除小明的sex属性
7. 删除小李兴趣中的第一项
8. 将小红兴趣中的画画爱好删除

// 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
db.class.updateOne({name: 'zhang'}, {$set: {age: 8, hobby: ['dance', 'draw']}})

// 追加小明兴趣爱好  唱歌
db.class.updateOne({name: 'li'}, {$push: {hobby: 'sing'}})

// 小王兴趣爱好增加  吹牛 打篮球
db.class.updateOne({name: 'wang'}, {$addToSet: {hobby: {$each: ['bluff', 'basketball']}}})

// 小李增加爱好,跑步和唱歌,但是不要和以前的重复
db.class.updateOne({name: 'zhao'}, {$addToSet: {hobby: {$each: ['run', 'sing'], $slice: -4}}})

// 该班所有同学年龄加1
db.class.updateMany({}, {$inc: {age: 1}})

// 删除小明的sex属性
db.class.updateOne({name: 'li'}, {$unset: {sex: 1}})

// 删除小李兴趣中的第一项
db.class.updateOne({name: 'zhao'}, {$pop: {hobby: -1}})

// 将小红兴趣中的画画爱好删除
db.class.updateOne({name: 'zhang'}, {$pull: {hobby: 'draw'}})

增加分数域 score:{'chinese':88,'english':78,'math':98}
1. 按照性别分组统计每组人数
2. 按照姓名分组,过滤出有重名的同学
3. 统计每名男生的语文成绩
4. 将女生按照英语分数降序排列


// 增加分数域 score:{'chinese':88,'english':78,'math':98}
db.class.updateMany({}, {$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: "$score.chinese"}}
])

// 将女生按照英语分数降序排列
db.class.find({sex: 'f'}).sort({'score.english': -1})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值