MySQL与Mongo简单的查询 1

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

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

我截个图方便看一下结构

好   接下来我们进入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"]}}
            ]
        }
    }

复制代码

得到这个结果

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

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

复制代码

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

  结果的表格模块显示:

 

  结果的文本模块显示:

复制代码

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

复制代码

 

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

转载于:https://my.oschina.net/u/2507227/blog/782506

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值