登录  /  注册

[教程]MongoDB 从入门到进阶 (aggregation数据库状态)

php中文网
发布: 2016-06-07 17:56:16
原创
1003人浏览过

下载地址: GitHub:https://github.com/magicdict/MagicMongoDBTool 在开始介绍这节之前,我来说说我开发这个工具的意义。 我不敢保证以后MongoDB可以大红大紫,也无法保证MongoDB以后会分享很多很多市场份额。 现在开发这个东西,一年后可能Mongo倒闭了,这

    下载地址:

     GitHub:  https://github.com/magicdict/MagicMongoDBTool

     在开始介绍这节之前,我来说说我开发这个工具的意义。

     我不敢保证以后MongoDB可以大红大紫,也无法保证MongoDB以后会分享很多很多市场份额。

     现在开发这个东西,一年后可能Mongo倒闭了,这个工具就是一个垃圾。一年后,Mongo修成正果,香港服务器,这个工具就是香饽饽。

     等所有人都觉得这个东西会火,你才去关注,开发工具,就晚了。花点业余时间,开发Mongo工具的同时,香港服务器租用,最主要去学习一下大数据的一些思想,例如副本,分片概念。

     还有就是阶层数据库的一些实现的方法。当然,由于3年前才开始从VB.NET转C#的,也希望通过多些编码将C#用身体记住。

[aggregation Framework]

例子1

aggregation Framework 是MongoDB的一个功能强大的统计框架,这里就演示一下这个框架的使用方法。

首先,我们新建一个aggregation数据集。然后再按照官方文档的样子,使用MongoCola插入一个文档。(将下面这段JSON直接粘贴到新建文档的窗体里面就可以了)

{ title : "this is my title" , author : "bob" , posted : new Date() , pageViews : 5 , tags : [ "fun" , "good" , "fun" ] , comments : [ { author :"joe" , text : "this is cool" } , { author :"sam" , text : "this is bad" } ], other : { foo : 5 } }

 

1.$project

这个操作符号,可以用来做Select 的操作。用来指定显示的列。

{ $project : { title : 1 , author : 1 }}

这里表示我们只是需要title和author列的信息。

这里的参数1:表示 0:非表示。 _id是一个默认的表示项目,我们可以通过将_id设置为0,告诉系统不表示这个项目。

{ $project : { _id : 0 , title : 1 , author : 1 }}

当然,你也可以新建一个字段,例如一个doctoredPageViews字段,这个字段是在原有字段的基础上加工而成的值。

就如 SQL中的,Select (pageViews + 10 As doctoredPageViews) from table

{ $project : { title : 1, doctoredPageViews : { $add:["$pageViews", 10] } }}

 当然你也可以重新命名列名

{ $project : { title : 1 , page_views : "$pageViews" , bar : "$other.foo" }}

最后你也可以通过Project操作符,来构建你想要的文档结果。下面这个例子里面的Status就是一个新建的子文档

{ $project : { title : 1 , stats : { pv : "$pageViews", foo : "$other.foo", dpv : { $add:["$pageViews", 10] } } }}

2$match这个操作符号,有点类似于Select文的Where条件。例如我们想寻找author是bob的记录:

{ $match : { author : "bob" } }

这个Aggregate框架里面的各种操作符号是可以任意组合的。我们可以既有match操作,又有project操作。

这里我们用工具将两种操作的条件分别加上。

注意:这里我们已经添加了2个条件了。第一个是match,第二个是project。

 

例子2

下面是例子的测试数据

{ "_id" : "1", "User" : "Tom", "Country" : "Finland", "Count" : 1 } { "_id" : "2", "User" : "Tom", "Country" : "Finland", "Count" : 3 } { "_id" : "3", "User" : "Tom", "Country" : "Finland", "Count" : 2 } { "_id" : "4", "User" : "Mary", "Country" : "Sweden", "Count" : 1 } { "_id" : "5", "User" : "Mary", "Country" : "Sweden", "Count" : 7 }

 

我们找一下是User是Tom,Count >= 2 的记录

{ $match : { User: "Tom", Count:{"$gte": 2} } }

4

关于操作符号: 

3 $Group

我们对于User进行Group操作,并且对于Count进行合计

注意,这里必须要有一个_id字段来表示Group的条件

{ $group : { _id : { "MyUser": "$User" } TotalCount : { $sum : "$Count" } } }

结果就是Mary的合计值是8,Tom则是6.

MyUser SUM(Count) AS TotalCount

 

我们再次添加一条记录

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号