当前位置: 首页 > 编程笔记 >

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

胡国兴
2023-03-14
本文向大家介绍MySQL与Mongo简单的查询实例代码,包括了MySQL与Mongo简单的查询实例代码的使用技巧和注意事项,需要的朋友参考一下

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

我想查询的内容是这样的:分数大于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"]}}
]
}
}

得到这个结果

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

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

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

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

 类似资料:
  • 本文向大家介绍php+mysql查询优化简单实例,包括了php+mysql查询优化简单实例的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php+mysql查询优化的方法。分享给大家供大家参考。具体分析如下: PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化,下面

  • 本文向大家介绍PHP MySql增删改查的简单实例,包括了PHP MySql增删改查的简单实例的使用技巧和注意事项,需要的朋友参考一下 mysql_connect()连接数据库 mysql_select_db选择数据库 mysql_fetch_assoc()获取结果集 mysql_query()执行sql语句 实例如下: 以上这篇PHP MySql增删改查的简单实例就是小编分享给大家的全部内容了,

  • 本文向大家介绍Oracle中scott表结构与简单查询实例分析,包括了Oracle中scott表结构与简单查询实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Oracle中scott表结构与简单查询的方法。分享给大家供大家参考。具体分析如下: 1、scott用户的表的结构 查看表结构 desc 表名;//desc emp; emp表: SQL> desc emp; 名称 是否为空?

  • 我有几年没写SQL查询了,有点生疏。我正在尝试编写一个查询,该查询将根据给定的演员姓名选择所有影片。因此,给出名称“Sandra”,我想选择film表中的影片,该影片在actor表的first_name或last_name中有“Sandra”。有一个film_actor表将这两个表链接起来,但我不知道如何正确地实现它。我得到的最接近的是,它返回演员和影片的INNER JOIN表。这个结果还有一个f

  • 问题内容: T-SQL查询 上面查询的LINQ to Entities替代 在stackoverflow上有很多复杂的子查询,我只想看一个简单的例子,说明如何通过linq完成一个简单的子查询。 问题答案: 简单的答案是使用 “ let” 关键字并生成一个子查询,该查询支持您的主要实体的条件集。 这将在TSQL中创建一个存在块,类似于 它接近您的要求,通常会在SQL Server上创建相同的查询计划

  • 问题内容: 我有一个大约有110.000.000项的大型mysql表 表设计为: 现在我要查询一个普通查询: Explain语句给我: 该查询似乎很慢(约185秒),但我不知道这是否仅是由于表中的项目数量所致。您是否提示我如何加快查询或查表的速度? 问题答案: 我通常都同意Drap,但是以下查询变体可能更加有效,尤其是对于更大的LIMIT: 要求和索引。

  • 本文向大家介绍Java WebService 简单实例(附实例代码),包括了Java WebService 简单实例(附实例代码)的使用技巧和注意事项,需要的朋友参考一下 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作。  一、准备工作(以下为本实例使用工具) 1、MyEclipse10.7.1 2、JDK 1.6.0_22  二、创建服务端 1、创建【Web Ser

  • 本文向大家介绍Hibernate hql查询代码实例,包括了Hibernate hql查询代码实例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Hibernate hql查询的相关内容,具体如下。 HQL介绍 Hibernate语言查询(Hibernate Query Language,HQL)它是完全面向对象的查询语句,查询功能非常强大;具备多态、关联等特性,HQL查询也是Hiber