mysql mongo关联查询语句_MySQL与Mongo简单的查询实例代码 筋斗云网络

简介

本文通过一个实例给大家用MySQL和mongodb分别写一个查询,本文图片并茂给大家介绍的非常详细,感兴趣的朋友参考下吧

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

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

我截个图方便看一下结构

4a8d15f9939c43a699206fcc70f0d728.png

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

这个是表格模块显示

83fdafb00a412afabc0a0f5935f1b472.png

这个是文本模块显示

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

]

}

}

得到这个结果

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

49c29641557c8b5bba393bcef67c8f44.png

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

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

结果的表格模块显示:

9b7349d29df73301aca042c4c657ff71.png

结果的文本模块显示:

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

原文链接:http://www.cnblogs.com/moon1223/archive/2016/10/17/5969400.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值