MySQL与Mongo简单的查询 1

Wesley13
• 阅读 523

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

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

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

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简单的查询 1

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

  这个是表格模块显示

MySQL与Mongo简单的查询 1

  这个是文本模块显示

MySQL与Mongo简单的查询 1

/* 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与Mongo简单的查询 1

开始进入正题

现在我想查的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

MySQL与Mongo简单的查询 1

db.demo.aggregate( { "$match":{ "$and":[ {"sorce":{"$gt":0}}, {"person":{"$in":["bob","jake"]}} ] } }

MySQL与Mongo简单的查询 1

得到这个结果

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

MySQL与Mongo简单的查询 1

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

MySQL与Mongo简单的查询 1

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

MySQL与Mongo简单的查询 1

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

那么$group派上用场了:

MySQL与Mongo简单的查询 1

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}} } )

MySQL与Mongo简单的查询 1

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

  结果的表格模块显示:

 MySQL与Mongo简单的查询 1

  结果的文本模块显示:

MySQL与Mongo简单的查询 1

/* 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简单的查询 1

以上就是一个简单查询的例子

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
MySQL 子查询及其优化
使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就碰到过一些案例,例如:SELECTi_id,sum(i_sell)
Wesley13 Wesley13
3年前
mysql sql优化
前言有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。注:这篇文章是以MySQL为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。优化目标  1.减少IO次数  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
mysql面试题及答案
01\.列举常见的关系型数据库和非关系型都有那些?1.关系型数据库通过外键关联来建立表与表之间的关系,常见的有:SQLite、Oracle、mysql2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定常见的有:MongoDb、redis02\.MySQL常见数据库引擎
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究