关于你欠缺的NoSQL中的redis和mongoDB


文章目录


前言

不知不觉已经进入NoSQL的学习来了,那么什么是NoSQL呢?NoSQL的数据分类有哪一些呢?

一、什么是NoSQL呢?

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系
型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这
些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

二、NoSQL的数据分类有哪一些呢?

1、键值数据库
相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
应用:内容缓存
优点:扩展性好、灵活性好、大量写操作时性能高
缺点:无法存储结构化信息、条件查询效率较低
使用者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和
Memcached)
2、列族数据库
相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
应用:分布式数据存储与管理
优点:查找速度快、可扩展性强、容易进行分布式扩展、复杂性低
使用者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、
Facebook(HBase)
3、文档数据库
相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit
应用:存储、索引并管理面向文档的数据或者类似的半结构化数据
优点:性能好、灵活性高、复杂性低、数据结构灵活
缺点:缺乏统一的查询语言
使用者:百度云数据库(MongoDB)、SAP(MongoDB)
4、图形数据库
相关产品:Neo4J、OrientDB、InfoGrid、GraphDB
应用:大量复杂、互连接、低结构化的图结构场合,如社交网络、推荐系统等
优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱
缺点:复杂性高、只能支持一定的数据规模
使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

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

REDIS中一些常用的命令

LPUSH/LPUSHX:LPUSH是将值插入到链表的头部,LPUSHX是检测这个链表是否存在,如果存在的话会插入头部,如果不存在会忽略这个数据

RPUSH/RPUSHX:将值插入到链表的尾部。同上,位置相反

LPOP:移除并获取链表中的第一个元素。

RPOP:移除并获取链表中最后一个元素。

LTRIM:保留指定区间内的元素。

LLEN:获取链表的长度。

LSET:用索引设置链表元素的值。

LINDEX:通过索引获取链表中的元素。

LRANGE:获取链表指定范围内的元素。

1、STRING类型

(1) 设置键值:SET用于添加键值对,值 为string类型

①127.0.0.1:6379> set key value EX 100
OK
SET key value EX 秒数 / PX 毫秒数 NX/XX

②127.0.0.1:6379> SETNX key value
0

127.0.0.1:6379> SETNX key1 value
1
SETNX key value
命令在设置成功时返回 1   设置失败时返回 0 

③127.0.0.1:6379> SETEX key2 100 value
OK
SETEX key 秒数 value

④127.0.0.1:6379> PSETEX KEY3 100 VALUE
OK
PSETEX key 毫秒数 value

⑤127.0.0.1:6379> TTL KEY4
-2
⑥127.0.0.1:6379> PTTL KEY4
-2

(2) 读取键值:GET KEY_NAME

127.0.0.1:6379> SETEX KEYA 10 "HELLO CHINA"
OK
127.0.0.1:6379> GET KEYA
HELLO CHINA
、
当我们再去get键值的时候,却发现什么都没有,因为这是设置的时间为10s,这个时候已经过期了。
127.0.0.1:6379> GET KEYA

(3) 数值类型自增1:INCR KEY_NAME

127.0.0.1:6379> set mykey 20
OK
127.0.0.1:6379> incr mykey
21

(4) 数值类型自减1:DECR KEY_NAME

127.0.0.1:6379> set mykey 20
OK
127.0.0.1:6379> decr mykey
19

(5) 查看值的长度:SETRLEN KEY_NAME

127.0.0.1:6379> set key "this is my country china"
OK
127.0.0.1:6379> strlen key
24

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

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

127.0.0.1:6379> lrange city 0 8
Hangzhou
Suzhou
Shanghai
tianjing
xian
chengdu
Chongqing

(2)将列表city里的头部的元素移除

127.0.0.1:6379> lpop city
Hangzhou
127.0.0.1:6379> lrange city 0 10
Suzhou
Shanghai
tianjing
xian
chengdu
chongqing
127.0.0.1:6379> 

(3)将name列表的尾部元素移除到number列表的头部
相关代码:RPOPLPUSH source destination

127.0.0.1:6379> lrange name 0 6
Mikky
Coco
Simmons
Tom
Susan
127.0.0.1:6379> rpoplpush name number
Susan
127.0.0.1:6379> lrange name 0 -1
Mikky
Coco
Simmons
Tom
127.0.0.1:6379> lrange number 0 -1
Susan
5
4
3
2
1

(4) 对一个已存在的列表插入新元素
相关代码:LPUSHX key value

127.0.0.1:6379> lrange name 0 6
Mikky
Coco
Simmons
Tom


127.0.0.1:6379> lpushx name Alice Brown
6

127.0.0.1:6379> lrange name 0 7
Brown
Alice
Mikky
Coco
Simmons
Tom

(5)查看list的值长度

相关代码:LLEN KEY_NAME

127.0.0.1:6379> llen name
6
127.0.0.1:6379> llen number
6

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

List的应用场景:论坛评论、秒杀、消息队列

Hash的应用场景:java里结构化的信息存储,例如用户个人信息(姓名、性别、兴趣爱好)用hash结构存储

二、MongoDB作业

1.准备工作

  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

2. 查找

1、查看班级所有人信息

代码用法:DB.数据库.FIND()

MongoDB Enterprise > db.class.find();
{ "_id" : ObjectId("64a54599a1a01a01ed810f6b"), "name" : "小刚", "age" : 18, "sex" : "m", "hobby" : [ "football", "pingpong", "baskerball", "computer" ] }
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing", "baskerball" ] }
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 19, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer" ] }
{ "_id" : ObjectId("64a5461da1a01a01ed810f6e"), "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }
{ "_id" : ObjectId("64a5463ea1a01a01ed810f6f"), "name" : "小芳", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing" ] }
{ "_id" : ObjectId("64a5466fa1a01a01ed810f70"), "name" : "小超", "age" : 21, "sex" : "m", "hobby" : [ "pingpong", "sing", "football" ] }
{ "_id" : ObjectId("64a54689a1a01a01ed810f71"), "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }
MongoDB Enterprise > db.class.insert({name:"小猛",age:20,sex:'m',hobby:['basketball','dance','draw']})
WriteResult({ "nInserted" : 1 })

2、查看班级中年龄为18岁的学生信息

MongoDB Enterprise > db.class.find({age:18})
{ "_id" : ObjectId("64a54599a1a01a01ed810f6b"), "name" : "小刚", "age" : 18, "sex" : "m", "hobby" : [ "football", "pingpong", "baskerball", "computer" ] }
{ "_id" : ObjectId("64a54935a1a01a01ed810f78"), "name" : "小白", "age" : 18, "sex" : "f", "hobby" : [ "dance", "sing" ] }
{ "_id" : ObjectId("64a54957a1a01a01ed810f79"), "name" : "小哲", "age" : 18, "sex" : "m", "hobby" : [ "computer", "football", "basketball" ] }

3、查看年龄大于20岁的学生信息

MongoDB Enterprise > db.class.find({age:{$gt:20}})
{ "_id" : ObjectId("64a5461da1a01a01ed810f6e"), "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }
{ "_id" : ObjectId("64a5466fa1a01a01ed810f70"), "name" : "小超", "age" : 21, "sex" : "m", "hobby" : [ "pingpong", "sing", "football" ] }
{ "_id" : ObjectId("64a54689a1a01a01ed810f71"), "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a5490aa1a01a01ed810f76"), "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }

4、查看年龄在 18-21岁之间的学生信息

MongoDB Enterprise > db.class.find({age:{$gte:18,$lte:21}})
{ "_id" : ObjectId("64a54599a1a01a01ed810f6b"), "name" : "小刚", "age" : 18, "sex" : "m", "hobby" : [ "football", "pingpong", "baskerball", "computer" ] }
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing", "baskerball" ] }
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 19, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer" ] }
{ "_id" : ObjectId("64a5461da1a01a01ed810f6e"), "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }
{ "_id" : ObjectId("64a5463ea1a01a01ed810f6f"), "name" : "小芳", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing" ] }
{ "_id" : ObjectId("64a5466fa1a01a01ed810f70"), "name" : "小超", "age" : 21, "sex" : "m", "hobby" : [ "pingpong", "sing", "football" ] }
{ "_id" : ObjectId("64a546bba1a01a01ed810f72"), "name" : "小猛", "age" : 20, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548f0a1a01a01ed810f74"), "name" : "小霞", "age" : 20, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54935a1a01a01ed810f78"), "name" : "小白", "age" : 18, "sex" : "f", "hobby" : [ "dance", "sing" ] }
{ "_id" : ObjectId("64a54957a1a01a01ed810f79"), "name" : "小哲", "age" : 18, "sex" : "m", "hobby" : [ "computer", "football", "basketball" ] }

5、找到年龄为20岁且为男生的学生

MongoDB Enterprise > db.class.find({age:20,sex:'m'})
{ "_id" : ObjectId("64a546bba1a01a01ed810f72"), "name" : "小猛", "age" : 20, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }

6、找到年龄小于20岁或者大于21岁的学生

MongoDB Enterprise > db.class.find({$or:[{age:{$lt:20}},{age:{$gt:21}}]})
{ "_id" : ObjectId("64a54599a1a01a01ed810f6b"), "name" : "小刚", "age" : 18, "sex" : "m", "hobby" : [ "football", "pingpong", "baskerball", "computer" ] }
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 19, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer" ] }
{ "_id" : ObjectId("64a54689a1a01a01ed810f71"), "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }
{ "_id" : ObjectId("64a548ffa1a01a01ed810f75"), "name" : "小绿", "age" : 17, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a5490aa1a01a01ed810f76"), "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54926a1a01a01ed810f77"), "name" : "小青", "age" : 17, "sex" : "m", "hobby" : [ "dance", "draw", "sing" ] }
{ "_id" : ObjectId("64a54935a1a01a01ed810f78"), "name" : "小白", "age" : 18, "sex" : "f", "hobby" : [ "dance", "sing" ] }
{ "_id" : ObjectId("64a54957a1a01a01ed810f79"), "name" : "小哲", "age" : 18, "sex" : "m", "hobby" : [ "computer", "football", "basketball" ] }

7、找到年龄是18岁或者21岁的学生

MongoDB Enterprise > db.class.find({$or:[{age:18},{age:21}]})
{ "_id" : ObjectId("64a54599a1a01a01ed810f6b"), "name" : "小刚", "age" : 18, "sex" : "m", "hobby" : [ "football", "pingpong", "baskerball", "computer" ] }
{ "_id" : ObjectId("64a5461da1a01a01ed810f6e"), "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }
{ "_id" : ObjectId("64a5466fa1a01a01ed810f70"), "name" : "小超", "age" : 21, "sex" : "m", "hobby" : [ "pingpong", "sing", "football" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54935a1a01a01ed810f78"), "name" : "小白", "age" : 18, "sex" : "f", "hobby" : [ "dance", "sing" ] }
{ "_id" : ObjectId("64a54957a1a01a01ed810f79"), "name" : "小哲", "age" : 18, "sex" : "m", "hobby" : [ "computer", "football", "basketball" ] }

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

MongoDB Enterprise > db.class.find({$where:"this.hobby.length == 2"})
{ "_id" : ObjectId("64a5463ea1a01a01ed810f6f"), "name" : "小芳", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing" ] }
{ "_id" : ObjectId("64a54935a1a01a01ed810f78"), "name" : "小白", "age" : 18, "sex" : "f", "hobby" : [ "dance", "sing" ] }

9、找到兴趣爱好有draw的学生

MongoDB Enterprise > db.class.find({hobby:'draw'})
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing", "baskerball" ] }
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 19, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer" ] }
{ "_id" : ObjectId("64a5463ea1a01a01ed810f6f"), "name" : "小芳", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing" ] }
{ "_id" : ObjectId("64a546bba1a01a01ed810f72"), "name" : "小猛", "age" : 20, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548f0a1a01a01ed810f74"), "name" : "小霞", "age" : 20, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548ffa1a01a01ed810f75"), "name" : "小绿", "age" : 17, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a5490aa1a01a01ed810f76"), "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54926a1a01a01ed810f77"), "name" : "小青", "age" : 17, "sex" : "m", "hobby" : [ "dance", "draw", "sing" ] }

10、找到既喜欢画画又喜欢跳舞的学生

MongoDB Enterprise > db.class.find({hobby:{$all:['dance','draw']}})
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 19, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer" ] }
{ "_id" : ObjectId("64a546bba1a01a01ed810f72"), "name" : "小猛", "age" : 20, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548f0a1a01a01ed810f74"), "name" : "小霞", "age" : 20, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548ffa1a01a01ed810f75"), "name" : "小绿", "age" : 17, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a5490aa1a01a01ed810f76"), "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54926a1a01a01ed810f77"), "name" : "小青", "age" : 17, "sex" : "m", "hobby" : [ "dance", "draw", "sing" ] }

11、统计爱好有三项的学生人数

MongoDB Enterprise > db.class.find({$where:"this.hobby.length == 3"})
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing", "baskerball" ] }
{ "_id" : ObjectId("64a5461da1a01a01ed810f6e"), "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }
{ "_id" : ObjectId("64a5466fa1a01a01ed810f70"), "name" : "小超", "age" : 21, "sex" : "m", "hobby" : [ "pingpong", "sing", "football" ] }
{ "_id" : ObjectId("64a54689a1a01a01ed810f71"), "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }
{ "_id" : ObjectId("64a546bba1a01a01ed810f72"), "name" : "小猛", "age" : 20, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548e4a1a01a01ed810f73"), "name" : "小刘", "age" : 21, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548f0a1a01a01ed810f74"), "name" : "小霞", "age" : 20, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a548ffa1a01a01ed810f75"), "name" : "小绿", "age" : 17, "sex" : "m", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a5490aa1a01a01ed810f76"), "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "_id" : ObjectId("64a54926a1a01a01ed810f77"), "name" : "小青", "age" : 17, "sex" : "m", "hobby" : [ "dance", "draw", "sing" ] }
{ "_id" : ObjectId("64a54957a1a01a01ed810f79"), "name" : "小哲", "age" : 18, "sex" : "m", "hobby" : [ "computer", "football", "basketball" ] }

12、找出本班年龄第二大的学生

MongoDB Enterprise > db.class.find({}).sort({age:-1}).skip(1).limit(1)
{ "_id" : ObjectId("64a54689a1a01a01ed810f71"), "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }

13、查看学生的兴趣范围

MongoDB Enterprise > db.class.distinct('hobby')
[
	"baskerball",
	"computer",
	"football",
	"pingpong",
	"draw",
	"sing",
	"dance",
	"basketball"
]

14、将学生按年龄排序找到年龄最大的三个

MongoDB Enterprise > db.class.find({},{_id:0}).sort({age:-1}).limit(3)
{ "name" : "小粉", "age" : 23, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ] }
{ "name" : "小莱", "age" : 22, "sex" : "f", "hobby" : [ "pingpong", "dance", "football" ] }
{ "name" : "小政", "age" : 21, "sex" : "m", "hobby" : [ "sing", "basketball", "computer" ] }

15、删除所有 年级大于20或者小于18岁的学生

MongoDB Enterprise > db.class.deleteMany({$or:[{age:{$gt:20}},{age:{$lt:5}}]})
{ "acknowledged" : true, "deletedCount" : 5 }

增加、更新、删除、统计

1、将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画

MongoDB Enterprise > db.class.update({'name':'小红'},{$set:{'age':8,'hobby':['dance','draw']}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
MongoDB Enterprise > db.class.find({'name':'小红'})
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 8, "sex" : "f", "hobby" : [ "dance", "draw" ] }

2、追加小白兴趣爱好 唱歌

MongoDB Enterprise > db.class.update({'name':'小白'},{$push:{'hobby':'sing'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

3、小哲兴趣爱好增加 吹牛 打篮球

MongoDB Enterprise > db.class.update({'name':'小哲'},{$push:{'hobby':{$each:['basketball','吹牛']}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

4、小珍增加爱好,跑步和唱歌,但是不要和以前的重复

MongoDB Enterprise > db.class.update({'name':'小珍'},{$addToSet:{hobby:{$each:['running','sing']}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

5、该班所有同学年龄加1

MongoDB Enterprise > db.class.update({},{$inc:{age:1}},false,true)
WriteResult({ "nMatched" : 10, "nUpserted" : 0, "nModified" : 10 })

6、删除小白的sex属性

MongoDB Enterprise > db.class.update({'name':'小白'},{$unset:{sex:0}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

7、删除小哲兴趣中的第一项

MongoDB Enterprise > db.class.update({'name':'小哲'},{$pop:{hobby:-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

8、将小红兴趣中的画画爱好删除

MongoDB Enterprise > db.class.update({'name':'小红'},{$pull:{hobby:'draw'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

MongoDB Enterprise > db.class.find({'name':'小红'})
{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 9, "sex" : "f", "hobby" : [ "dance" ] }

3、增加分数域 score:{'chinese':88,'english':78,'math':98}

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

MongoDB Enterprise > db.class.aggregate([ { $group: { _id: "$sex", count: { $sum: 1 } } }])
{ "_id" : null, "count" : 1 }
{ "_id" : "f", "count" : 4 }
{ "_id" : "m", "count" : 5 }

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

MongoDB Enterprise > db.class.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])

3、统计每名男生的语文成绩

MongoDB Enterprise > db.class.aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])
{ "name" : "小刚", "score" : { "chinese" : 80 } }
{ "name" : "小猛", "score" : { "chinese" : 89 } }
{ "name" : "小绿", "score" : { "chinese" : 78 } }
{ "name" : "小青", "score" : { "chinese" : 75 } }
{ "name" : "小哲", "score" : { "Chinese" : 80 } }

4、将女生按照英语分数降序排列

MongoDB Enterprise > db.class.aggregate([{$match:{sex:'f'}},{$sort:{'score.english':-1}}])

{ "_id" : ObjectId("64a5459ca1a01a01ed810f6c"), "name" : "小红", "age" : 9, "sex" : "f", "hobby" : [ "dance" ], "score" : { "chinese" : 95, "english" : 90, "math" : 85 } }
{ "_id" : ObjectId("64a545d7a1a01a01ed810f6d"), "name" : "小珍", "age" : 20, "sex" : "f", "hobby" : [ "draw", "sing", "dance", "computer", "running" ], "score" : { "chinese" : 93, "english" : 88, "math" : 94 } }
{ "_id" : ObjectId("64a548f0a1a01a01ed810f74"), "name" : "小霞", "age" : 21, "sex" : "f", "hobby" : [ "basketball", "dance", "draw" ], "score" : { "chinese" : 92, "english" : 85, "math" : 76 } }
{ "_id" : ObjectId("64a5463ea1a01a01ed810f6f"), "name" : "小芳", "age" : 21, "sex" : "f", "hobby" : [ "draw", "sing" ], "score" : { "chinese" : 86, "english" : 80, "math" : 90 } }
相关推荐
C++忠实粉丝1 小时前
Redis 介绍和安装
数据库·redis·缓存
ClouGence1 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
苏三说技术2 小时前
Redis 性能优化的18招
数据库·redis·性能优化
Tttian6222 小时前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
言之。3 小时前
redis延迟队列
redis
hanbarger4 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
弗罗里达老大爷4 小时前
Redis
数据库·redis·缓存
一只路过的猫咪5 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb
DT辰白19 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存
木子七20 小时前
Redis-十大数据类型
redis