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

简介

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

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

我想查询的内容是这样的:分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数

举这个实例来试试用MySQL和mongodb分别写一个查询

首先我们先做一些准备工作

MySQL的数据库结构如下

  1. CREATE TABLE new_schema.demo (
  2. id INT NOT NULL,
  3. person VARCHAR(45) NOT NULL,
  4. score VARCHAR(45) NOT NULL,
  5. PRIMARY KEY (id));

建完表之后我们来插入一些数据

  1. INSERT INTO new_schema.demo (idpersonscoreVALUES ('1', 'bob', '50');
  2. INSERT INTO new_schema.demo (idpersonscoreVALUES ('2', 'jake', '60');
  3. INSERT INTO new_schema.demo (idpersonscoreVALUES ('3', 'bob', '100');
  4. INSERT INTO new_schema.demo (idpersonscoreVALUES ('6', 'jake', '100');
  5. INSERT INTO new_schema.demo (idpersonscoreVALUES ('8', 'li', '100');

我截个图方便看一下结构

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

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

这个是表格模块显示

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

这个是文本模块显示

  1. /* 1 */
  2. {
  3. "_id" : ObjectId("58043fa8e9a7804c05031e17"),
  4. "person" : "bob",
  5. "sorce" : 50
  6. }
  7. /* 2 */
  8. {
  9. "_id" : ObjectId("58043fa8e9a7804c05031e18"),
  10. "person" : "bob",
  11. "sorce" : 100
  12. }
  13. /* 3 */
  14. {
  15. "_id" : ObjectId("58043fa8e9a7804c05031e19"),
  16. "person" : "jake",
  17. "sorce" : 60
  18. }
  19. /* 4 */
  20. {
  21. "_id" : ObjectId("58043fa8e9a7804c05031e1a"),
  22. "person" : "jake",
  23. "sorce" : 100
  24. }
  25. /* 5 */
  26. {
  27. "_id" : ObjectId("58043fa8e9a7804c05031e1b"),
  28. "person" : "li",
  29. "sorce" : 100
  30. }

开始进入正题

现在我想查的MySQL语句是这样的(分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数)

  1. SELECT person, SUM(score), AVG(score), MIN(score), MAX(score), COUNT(*)
  2. FROM demo
  3. WHERE score > 0 AND person IN('bob','jake')
  4. GROUP BY person;

下面开始用Mongo写出这个查询

首先想到的是聚合框架

先用$match过滤 分数大于0且人名是bob或是jake

  1. db.demo.aggregate(
  2. {
  3. "$match":{
  4. "$and":[
  5. {"sorce":{"$gt":0}},
  6. {"person":{"$in":["bob","jake"]}}
  7. ]
  8. }
  9. }

得到这个结果

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

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

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

  1. /* 1 */
  2. {
  3. "_id" : ObjectId("58043fa8e9a7804c05031e17"),
  4. "person" : "bob",
  5. "sorce" : 50
  6. }
  7. /* 2 */
  8. {
  9. "_id" : ObjectId("58043fa8e9a7804c05031e18"),
  10. "person" : "bob",
  11. "sorce" : 100
  12. }
  13. /* 3 */
  14. {
  15. "_id" : ObjectId("58043fa8e9a7804c05031e19"),
  16. "person" : "jake",
  17. "sorce" : 60
  18. }
  19. /* 4 */
  20. {
  21. "_id" : ObjectId("58043fa8e9a7804c05031e1a"),
  22. "person" : "jake",
  23. "sorce" : 100
  24. }

然后想要分组并且显示最大 最小 总计 平均值 和计数值

那么$group派上用场了:

  1. db.demo.aggregate(
  2. {
  3. "$match":{
  4. "$and":[
  5. {"sorce":{"$gt":0}},
  6. {"person":{"$in":["bob","jake"]}}
  7. ]
  8. }
  9. },
  10. {
  11. "$group":{"_id":"$person",
  12. "sumSorce":{"$sum":"$sorce"},
  13. "avgSorce":{"$avg":"$sorce"},
  14. "lowsetSorce":{"$min":"$sorce"},
  15. "highestSorce":{"$max":"$sorce"},
  16. "count":{"$sum":1}}
  17. }
  18. )

得到的结果就是 分数大于0且人名是bob或是jake的总分数 平均分数 最小分数 最大分数 计数

结果的表格模块显示:

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

结果的文本模块显示:

  1. /* 1 */
  2. {
  3. "_id" : "bob",
  4. "sumSorce" : 150,
  5. "avgSorce" : 75.0,
  6. "lowsetSorce" : 50,
  7. "highestSorce" : 100,
  8. "count" : 2.0
  9. }
  10. /* 2 */
  11. {
  12. "_id" : "jake",
  13. "sumSorce" : 160,
  14. "avgSorce" : 80.0,
  15. "lowsetSorce" : 60,
  16. "highestSorce" : 100,
  17. "count" : 2.0
  18. }

以上所述是小编给大家介绍的MySQL与Mongo简单的查询实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

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

weinxin
我的微信
把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
avatar

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

Replies to:2   Visitors  2   Admin  0

    • avatar PHP程序员雷雪松
      Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ip2country has a deprecated constructor in /www/wwwroot/150643.com/wp-content/themes/begin/show-useragent/ip2c/ip2c.php on line 3
      来自天朝的朋友 谷歌浏览器 Windows 7 湖北省武汉市 电信
      2

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

      • avatar 小刘 来自天朝的朋友 谷歌浏览器 Linux 山东省青岛市 联通 2

        很受用