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

  • 2,084
简介

本文通过一个实例给大家用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` (`id`, `person`, `score`) VALUES ('1', 'bob', '50');
  2. INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('2', 'jake', '60');
  3. INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('3', 'bob', '100');
  4. INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('6', 'jake', '100');
  5. INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('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
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年10月18日12:49:16
  • 转载请务必保留本文链接:https://www.150643.com/368.html
匿名

发表评论

匿名网友 填写信息

评论:2   其中:访客  2   博主  0
    • PHP程序员雷雪松 PHP程序员雷雪松 2

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

      • 小刘 小刘 2

        很受用