NOSQL简单实战

news2025/1/11 8:53:16

目录

实战一:

  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 city

ttl 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.coloradmin.cn/o/760399.html

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

相关文章

基于html2canvas和jspdf将document DOM节点转换为图片生成PDF文件,并下载到本地

这里要用到html2canvas将document DOM节点转换为图片,并下载到本地_你挚爱的强哥的博客-CSDN博客前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件_你挚爱的强哥的博客-CSDN博客。会自动创建一个html文件。https://blog.csdn.net/qq_37860634/art…

业务中添加历史版本事务并发处理

业务背景:项目中包含历史版本的管理,每次保存历史版本都添加一条新的记录到数据库,且版本号加1。保存版本的时候1.要先查询历史版本数据表,获取当前最新的版本号;2.最新的版本号加1,插入数据历史版本记录表…

dp算法 力扣174地下城游戏

在学习编程时,算法是一道硬菜,而dp作为算法的一份子,它的地位在编程界举足轻重。 174. 地下城游戏 - 力扣(LeetCode) 本文是Java代码哦~ 一、题目详情 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地…

Vue列表渲染(v-for)以及key的作用与原理

索引值的两种写法&#xff1a; <!--index遍历时的默认索引值--> <ul><li v-for"(p,index) in persons":key"index">{{p.name}}--{{p.age}}</li></ul> 代码&#xff1a; v-for"p in persons" :key"p.id&quo…

【多维数组对象拍平处理为一维数组】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

深谋远“绿”,数据中心未来之路在何方?

数据中心未来演进方向是什么&#xff1f; 在中国绿色算力大会-华为数据中心平行会议上&#xff0c;业界愈发形成共识&#xff1a;即在双碳目标的大背景下&#xff0c;数据中心走向绿色低碳化、智能化。 去年初&#xff0c;东数西算工程正式启动建设&#xff0c;标志着我国数据…

Ui自动化测试上传文件方法都在这里了

目录 前言 被测HTML代码 send_keys方法 实例------------------------------------ Time : 2019/7/17 19:03 Auth : linux超 File : upload_file_send_keys.py IDE : PyCharm Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error! QQ : 2…

代码随想录第26天 | ● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独

332. 重新安排行程 /*** param {string[][]} tickets* return {string[]}*/var findItinerary function (tickets) {let s "ZZZ";let start;for (let i in tickets) {if (tickets[i][0] "JFK" && tickets[i][1] < s) {start i;s tickets[i…

密码学学习笔记(十三):哈希函数 - Merkle–Damgård结构

Merkle–Damgrd是一种算法&#xff0c;由Ralph Merkle和Ivan Damgrd提出。它通过迭代调用压缩函数来计算消息的哈希值。 应用 拿SHA-2举例&#xff0c;首先我们需要对需要进行哈希运算的输入做填充&#xff0c;然后将填充后的输入划分为等长的分组&#xff0c;每个分组的长度…

uniapp 土法 瀑布流 - vue3

效果图 代码 <template><view><!-- 瀑布流展示 --><!-- 标签页 --><view class="rowStart flexNoLineBreaking paddingCol10 innerDomPaddingRow5 tinyShadow marginBottom10"><view @click="tabsCurrent = 0; run_waterfa…

计算机网络基础第六章

一、应用层概述 1.1 网络应用模型 1.1.1 客户/服务器(C/S)模型 1.1.2 P2P模型 二、域名解析系统——DNS系统 2.1 域名 2.2 域名服务器 2.3 域名解析过程 三、文件传输协议——FTP 3.1 FTP服务器和用户端 3.2 FTP工作原理 四、电子邮件 4.1 电子邮件系统概述 4.2 简单邮件传送…

C# Modbus通信从入门到精通(1)——Modbus RTU(虚拟串口调试工具的使用)

前言: 订阅本专栏后,加入vip专属的qq群,在群资料里面就能找到虚拟串口工具 1、安装虚拟串口工具 第1步、双击vspd.exe安装 第2步、 打开“Cracked”的文件夹,里面有一个vspdct.dll,如下图:把这个dll粘贴到C:\Program Files (x86)\Eltima Software\Virtual Serial Po…

Python垃圾回收

Python垃圾回收 文章目录 Python垃圾回收引用计数标记清除分代回收 GC作为现代编程语言的自动内存管理机制&#xff0c;专注于两件事&#xff1a; 找到内存中无用的垃圾资源清除这些垃圾并把内存让出来给其他对象使用。 GC彻底把程序员从资源管理的重担中解放出来&#xff0c;让…

MySQL-DML-添加数据insert

目录 添加数据&#xff1a;insert insert语法 注意事项 修改数据&#xff1a;update update语法 注意事项&#xff1a; 删除数据&#xff1a;delete 删除语法 注意事项 总结 DML英文全称Data Manipulation Language&#xff08;数据操作语言&#xff09;&#xff0c;…

数据结构---B+Tree

文章目录 BTree简单了解一下BTree MySQL表数据文件MyISAM存储引擎和InnoDB存储引擎的区别&#xff1f; BTree 在我没了解BTree之前&#xff0c;听别人提到这个词时&#xff0c;脑子一片空白&#xff0c;懵懵的&#xff0c;今天利用空闲时间&#xff0c;简单了解了一下BTree&am…

去掉浮夸,空杯心态重新面对测试

刚开始一头扎进软件测试行业&#xff0c;从踏踏实实的机械化功能测试&#xff0c;到学会和甲方扯皮&#xff0c;到被鄙视的五体投地后抓紧修炼表面功夫来忽悠人&#xff0c;学的最多的反而是怎么与人交流。第一次面对跳槽的机会&#xff0c;我竟然发现自己的测试能力不升反降。…

微服务系统面经

微服务架构 秒杀微服务架构图 项目地址可以参考&#xff1a;秒杀系统 1 一个java的微服务系统中有几个网关&#xff1f; 在一个Java的微服务系统中&#xff0c;网关的数量并不固定&#xff0c;这完全取决于系统的设计和需求。网关服务是微服务架构中的重要组件&#xff0c;它…

架构训练营学习笔记:4-4如何设计存储架构?

存储架构设计的三个步骤 分为&#xff1a;1 估算性能需求 2、选择存储系统 3 设计存储方案 性能估算步骤 一 用户量预估 2B的业务&#xff0c;数据量需要预估&#xff0c;2C的需要决策。 方法&#xff1a; 规划&#xff1a;根据成本、预算、目标等确定 推算&#xff1a;基于…

SRA数据下载的一个坑

前两天协助处理GEO数据上的一个单细胞数据&#xff0c;发现了一个巨坑&#xff0c;这里分享下&#xff0c;希望大家能避开。 需要下载的数据集是&#xff0c;GSE119562&#xff0c;查询SRA Run Selector&#xff0c;找到它对应的SRR编号。 于是&#xff0c;我非常熟练的用pref…

【接口自动化测试】HTTP协议详解

协议 简单理解&#xff0c;计算机与计算机之间的通讯语言就叫做协议&#xff0c;不同的计算机之间只有使用相同的协议才能通信。所以网络协议就是为计算机网络中进行数据交换而建立的规则&#xff0c;标准或约定的集合。 OSI模型 1978年国际化标准组织提出了“开放系统互联网…