DDR爱好者之家 Design By 杰米

首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多)直接切入主题

我想查询的内容是这样的:分数大于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');

我截个图方便看一下结构

MySQL与Mongo简单的查询实例代码

好 接下来我们进入mongodb的准备工作 看一下建立的mongodb的集合里面文档的结构(基本跟MySQL一毛一样)在这里我就不写插入文档的具体过程了 (为了便看mongodb的显示我都用两种格式显示:一个是表哥模块显示 一个是文本模块显示)

  这个是表格模块显示

MySQL与Mongo简单的查询实例代码

  这个是文本模块显示

/* 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"]}}
]
}
}

得到这个结果

  这个是表哥模块显示的结果:

MySQL与Mongo简单的查询实例代码

  这个是文本模块显示的结果:

/* 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的总分数 平均分数 最小分数 最大分数 计数

  结果的表格模块显示:

MySQL与Mongo简单的查询实例代码

  结果的文本模块显示:

/* 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简单的查询实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。