nosql简单实战

作业一:string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令

   1、 string类型数据的命令操作:


    (1) 设置键值:

 set str 68


    (2) 读取键值:

 get str

 
    (3) 数值类型自增1:

 get str

 
    (4) 数值类型自减1:

 decr str

 
    (5) 查看值的长度:

 strlen str

nosql简单实战_第1张图片

    2、 list类型数据的命令操作:

 (1)对列表city插入元素:Shanghai Suzhou Hangzhou       

lpush city shanghai suzhou hangzhou

nosql简单实战_第2张图片
    (2)将列表city里的头部的元素移除

 lpop city

nosql简单实战_第3张图片
    (3)将name列表的尾部元素移除到number列表的头部

lpush name zhnagsan lisi wngwu
rpoplpush name number

nosql简单实战_第4张图片
    (4) 对一个已存在的列表插入新元素

 rpushx city xian

 nosql简单实战_第5张图片
    (5)查看list的值长度

 llen city


    3、 hash类型数据的命令操作:

   (1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三

 hmset order id 1 customer_name "张三"

nosql简单实战_第6张图片

(2) 创建一个hash表,表里的键值批量插入

  hmset gagale name lisi age 68 gender nan

nosql简单实战_第7张图片
    (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 city


    (4) 遍历key

 scan 0

scan 0 match n*

 nosql简单实战_第8张图片

实战二:

举例说明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.insert([
{name:"zhang",age:10,sex:'m',hobby:['a','b','c']},
.....
])

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}]});


找到兴趣爱好有两项的学生

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}

1. 按照性别分组统计每组人数

db.class.aggregate([{$group:{_id: "$sex",count:{$sum:1}}}]) 

2. 按照姓名分组,过滤出有重名的同学 

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}}])  

你可能感兴趣的:(nosql,数据库)