首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多)直接切入主题
我想查询的内容是这样的:分数大于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'); |
我截个图方便看一下结构
好 接下来我们进入mongodb的准备工作 看一下建立的mongodb的集合里面文档的结构(基本跟MySQL一毛一样)在这里我就不写插入文档的具体过程了 (为了便看mongodb的显示我都用两种格式显示:一个是表哥模块显示 一个是文本模块显示)
这个是表格模块显示
这个是文本模块显示
/* 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"]}}]}} |
得到这个结果
这个是表哥模块显示的结果:
新闻热点
疑难解答