首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多)直接切入主题
我想查询的内容是这样的:分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数
举这个实例来试试用MySQL和mongodb分别写一个查询
首先我们先做一些准备工作
MySQL的数据库结构如下
CREATE TABLE `new_schema`.`demo` ( `id` INT NOT NULL, `person` VARCHAR(45) NOT NULL, `score` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`));
建完表之后我们来插入一些数据
INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('1', 'bob', '50'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('2', 'jake', '60'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('3', 'bob', '100'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('6', 'jake', '100'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('8', 'li', '100');
我截个图方便看一下结构
好 接下来我们进入mongodb的准备工作 看一下建立的mongodb的集合里面文档的结构(基本跟MySQL一毛一样)在这里我就不写插入文档的具体过程了 (为了便看mongodb的显示我都用两种格式显示:一个是表哥模块显示 一个是文本模块显示)
这个是表格模块显示
这个是文本模块显示
/* 1 */ { "_id" : ObjectId("58043fa8e9a7804c05031e17"), "person" : "bob", "sorce" : 50 } /* 2 */ { "_id" : ObjectId("58043fa8e9a7804c05031e18"), "person" : "bob", "sorce" : 100 } /* 3 */ { "_id" : ObjectId("58043fa8e9a7804c05031e19"), "person" : "jake", "sorce" : 60 } /* 4 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1a"), "person" : "jake", "sorce" : 100 } /* 5 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1b"), "person" : "li", "sorce" : 100 }
开始进入正题
现在我想查的MySQL语句是这样的(分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数)
SELECT person, SUM(score), AVG(score), MIN(score), MAX(score), COUNT(*) FROM demo WHERE score > 0 AND person IN('bob','jake') GROUP BY person;
下面开始用Mongo写出这个查询
首先想到的是聚合框架
先用$match过滤 分数大于0且人名是bob或是jake
db.demo.aggregate( { "$match":{ "$and":[ {"sorce":{"$gt":0}}, {"person":{"$in":["bob","jake"]}} ] } }
得到这个结果
这个是表哥模块显示的结果:
这个是文本模块显示的结果:
/* 1 */ { "_id" : ObjectId("58043fa8e9a7804c05031e17"), "person" : "bob", "sorce" : 50 } /* 2 */ { "_id" : ObjectId("58043fa8e9a7804c05031e18"), "person" : "bob", "sorce" : 100 } /* 3 */ { "_id" : ObjectId("58043fa8e9a7804c05031e19"), "person" : "jake", "sorce" : 60 } /* 4 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1a"), "person" : "jake", "sorce" : 100 }
然后想要分组并且显示最大 最小 总计 平均值 和计数值
那么$group派上用场了:
db.demo.aggregate( { "$match":{ "$and":[ {"sorce":{"$gt":0}}, {"person":{"$in":["bob","jake"]}} ] } }, { "$group":{"_id":"$person", "sumSorce":{"$sum":"$sorce"}, "avgSorce":{"$avg":"$sorce"}, "lowsetSorce":{"$min":"$sorce"}, "highestSorce":{"$max":"$sorce"}, "count":{"$sum":1}} } )
得到的结果就是 分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数
结果的表格模块显示:
结果的文本模块显示:
/* 1 */ { "_id" : "bob", "sumSorce" : 150, "avgSorce" : 75.0, "lowsetSorce" : 50, "highestSorce" : 100, "count" : 2.0 } /* 2 */ { "_id" : "jake", "sumSorce" : 160, "avgSorce" : 80.0, "lowsetSorce" : 60, "highestSorce" : 100, "count" : 2.0 }
以上所述是小编给大家介绍的MySQL与Mongo简单的查询实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
mongo,mysql
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]