NOSQL简单实战

目录

实战一:

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


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像标注是什么?及其类型和应用

什么是图像标注? 图像标注是与您交互的许多人工智能产品的基础,并且是计算机视觉(CV)领域重要的过程之一。在图像标注过程中,数据标注员使用标签或元数据来标记AI模型学习识别的数据特征。然后,这些图像标…

Triton_server部署学习笔记

下载镜像 docker pill http://nvcr.io/nvidia/tritonserver:22.07-py3 docker run --gpus all -itd -p8000:8000 -p8001:8001 -p8002:8002 -v /home/ai-developer/server/docs/examples/model_repository/:/models nvcr.io/nvidia/tritonserver:22.07-py3 docker exec -it a5…

Spring+SpringMvc+Mybatis整合小Demo

原始方式整合SSM 不使用spring-mybatis包 项目内容 整合ssm完成对account表新增和查询的操作 项目大体结构 创建mavenWeb项目 pom文件中引入依赖 spring核心、aspectj(aop)、spring-jdbc(jdbcTemplate)、spring-tx(事务)、 数据源:mysql、c3p0、mybatis my…

vue2的 element 表格单元格合并

<template><div><el-table show-summary :summary-method"getSummaries" :span-method"objectSpanMethod" :data"tableData" row-key"id" ref"tableDom" border><el-table-column label"序号&quo…

【golang】12、gin 源码解析

文章目录 快速使用返回响应路由匹配pathqueryMultipart/Urlencoded Form 解析请求MultipartFrom MiddleWare github.com/gin-gonic/gin 是 golang 的 web 框架&#xff0c;其用字典树做路由匹配、支持中间件&#xff0c;本文介绍其源码实现。 快速使用 package mainimport (&…

ylb-接口6验证手机号是否注册

总览&#xff1a; 1、service处理 在api模块下service包&#xff0c;创建一个UserService接口&#xff1a;&#xff08;根据手机号查询数据queryByPhone(String phone)&#xff09; package com.bjpowernode.api.service;import com.bjpowernode.api.model.User; import co…

ASL/CS系列音视频转换方案芯片,Typec拓展坞方案芯片

音视频单转方案芯片&#xff1a; CS5565 Typec转HDMI 8K 60HZ转换方案 可替代RTD2173 PS196 CS5801 HDMI转eDP/DP方案 可替代LT6711 CS5212 DP转VGA转换方案 可PIN TO PIN 替代RTD2166 CS5211 E…

❤️创意网页:HTML5 Canvas技术实现绚丽多彩的烟花特效

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

【java】【基础2】程序流程控制

目录 一、最经典的三种执行顺序 二、分支结构 2.1 if 2.2 switch 2.3 if与switch区别 三、循环结构 3.1 for循环 3.2 while循环 3.3 do-while循环 3.4 三种循环区别 3.5 补充知识&#xff1a;死循环 3.6 补充知识&#xff1a;循环嵌套 四、跳转关键字&#xff1a;br…

Mysql如何查询出两个日期之间的所有日期?

问题&#xff1a; 有时我们在生成一些时间轴类似的数据时&#xff0c;要求数据库不管有没有指定天的数据&#xff0c;都要生成该时间节点&#xff0c;可用mysql.help_topic来解决此类问题&#xff0c;通过序列和日期函数相结合来满足我们的业务需求。 例如&#xff1a;查询20…

Web开发的富文本编辑器CKEditor介绍,Django有库ckeditor_uploader对它进行支持,django-ckeditor安装方法及使用注意事项

当需要在网页应用程序中提供富文本编辑功能时&#xff0c;CKEditor是一个流行的选择。CKEditor是一个开源的JavaScript富文本编辑器&#xff0c;它提供了强大的功能和用户友好的界面&#xff0c;使用户可以轻松创建和编辑格式化的文本内容。 以下是CKEditor的一些主要特性&…

rabbitMQ杂记

消息队列应用场景 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量 削锋等问题实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性&#xff1a; 解耦&#xff1a; 异步&#xff1a; 削峰&#xff1a; 常…

3.12 Bootstrap 超大屏幕(Jumbotron)

文章目录 Bootstrap 超大屏幕&#xff08;Jumbotron&#xff09; Bootstrap 超大屏幕&#xff08;Jumbotron&#xff09; 下面将讲解 Bootstrap 支持的另一个特性&#xff0c;超大屏幕&#xff08;Jumbotron&#xff09;。顾名思义该组件可以增加标题的大小&#xff0c;并为登陆…

详解Windows安装分布式版本控制系统git

文章目录 前言下载安装相关链接 前言 git是一个分布式版本控制软件&#xff0c;最初由Linux创作者Linus Torvalds创作&#xff0c;并于2015年以GPL许可协议发布。git易于学习&#xff0c;占用空间小&#xff0c;性能却快如闪电&#xff0c;可以快速、 高效的管理从小到大的项目…

DeFi新篇章 | Sui上原生订单簿DeepBook正式上线

随着原生去中心化中央限价订单簿&#xff08; Central Limit Order Book&#xff0c;CLOB&#xff09;DeepBook的推出&#xff0c;Sui上的DeFi开启了新篇章。DeepBook由一群Sui贡献者共同构建&#xff0c;为新一代DeFi应用提供了一个稳定的流动性层。 通过DeepBook&#xff0c…

mac批量修改文件名为不同名字

mac批量修改文件名为不同名字怎么弄&#xff1f;很多小伙伴通过私信向我求助&#xff0c;用什么方法可以在mac电脑上批量修改文件名称&#xff0c;将大量文件修改成不同的名称。这可能是一项比较麻烦的操作&#xff0c;在电脑上进行过批量重命名的小伙伴都知道&#xff0c;一般…

Redis源码篇 - Reactor设计模式 和 Redis Reactor设计模式

Reactor &#xff1a;反应器模式或者应答者模式&#xff0c;它是一种基于事件驱动的设计模式。拥有一个或者多个输入源&#xff0c;通过反应器分发给多个worker线程处理&#xff0c;实现并发场景下事件处理。 此图网上找的&#xff0c;画的很好&#xff1a;

C# 抽象类和接口详解

参考视频链接&#xff1a;https://www.bilibili.com/video/BV13b411b7Ht?p27&vd_source10065785c7e10360d831474364e0d3e3 代码的进化与重构&#xff0c;从基本代码的讲解到逐步抽象成抽象类和接口。 文章目录 最初定义利用继承改进对方法进一步改进利用虚函数进行改进利…

如何设计光场2.0(聚焦型光场相机)系统参数

1. 系统参数设计 目前的硬件系统的现状&#xff1a;主透镜50mm&#xff0c;MLA&#xff1a;15*15&#xff0c;d0.5mm&#xff0c;f15mm&#xff0c;s4.8um 开普勒型光场系统&#xff1a; 首先我们需要确定系统的M&#xff0c;M参数表示单个位置的点能被多少个小微透镜成像&am…

python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录 一&#xff0e;前言二&#xff0e;展示1.主界面1.进程2.性能1.CPU2.内存 3.简略信息4.详细信息5.新建任务 三&#xff0e;设计思路1.UI设计1.主界面1.进程2.性能3.详细信息4.新建任务5.图表信息组件 2.代码整体设计1.项目设计心得2.项目设计其他心得 3.其他心得 四&am…