12
返回列表 发新帖
楼主: jieforest

MongoDB聚合详解

[复制链接]
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
11#
 楼主| 发表于 2013-12-2 11:26 | 只看该作者
我们看到这不是我们想要的结果,group将“tomato” 和“Tomato”作为两个组来对待!通过在group函数中使用键“$keyf” 代替键“key” 来指定分组依赖的键,会解决这个问题,使用方位为:
  1. > db.vegetableprice.find();
  2. { "_id" : ObjectId("50273c44e02ab93d5c5be7a1"), "name" : "tomato", "price" : 3.5, "time" : ISODate("2012-08-12T05:16:52.106Z") }
  3. { "_id" : ObjectId("50273c4ce02ab93d5c5be7a2"), "name" : "Tomato", "price" : 3.5, "time" : ISODate("2012-08-12T05:17:00.686Z") }
  4. > db.runCommand({"group" : {
  5. ... "ns" : "vegetableprice",
  6. ... "$keyf" : function(doc){return {"name" : doc.name.toLowerCase()};},
  7. ... "initial" : {"time" : 0},
  8. ... "$reduce" : function(doc, prev){
  9. ...                 if(doc.time > prev.time){
  10. ...                     prev.time = doc.time;
  11. ...                     prev.price = doc.price;
  12. ...                 }
  13. ...             }
  14. ... }});
  15. {
  16.         "retval" : [
  17.                 {
  18.                         "name" : "tomato",
  19.                         "time" : ISODate("2012-08-12T05:17:00.686Z"),
  20.                         "price" : 3.5
  21.                 }
  22.         ],
  23.         "count" : 2,
  24.         "keys" : 1,
  25.         "ok" : 1
  26. }
  27. >
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
12#
 楼主| 发表于 2013-12-2 11:27 | 只看该作者
注意键“$keyf”后面是一个函数,function(doc){….},参数doc就表示当前需要提取分组键的文档!这个函数会对这个文档的特定分组键的值进行一些处理!此处进行的是,将键“name”的值全部转化为小写!注意这个函数最后也必须返回一个文档!

我们上述演示的所有group操作,全是通过运行数据库命令实现的!实际上,MongoDB为集合也提供了group函数!使用方法同上,这里就不做演示了。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
13#
 楼主| 发表于 2013-12-2 11:27 | 只看该作者
over.

使用道具 举报

回复
论坛徽章:
12
雪佛兰
日期:2014-01-05 08:56:16雪佛兰
日期:2014-01-14 12:25:15本田
日期:2014-01-14 12:25:15法拉利
日期:2014-01-05 15:35:26兰博基尼
日期:2014-01-05 15:35:26夏利
日期:2014-01-05 15:35:26保时捷
日期:2014-01-05 15:35:26阿斯顿马丁
日期:2014-01-05 15:35:26日产
日期:2014-01-05 13:29:47保时捷
日期:2014-01-05 13:01:36
14#
发表于 2013-12-10 17:00 | 只看该作者
擦 看不懂

使用道具 举报

回复
招聘 : 数据工程师
论坛徽章:
92
生肖徽章2007版:鸡
日期:2013-11-12 07:55:03马上有房
日期:2014-02-18 16:42:02马上有钱
日期:2014-04-09 17:17:412014年世界杯参赛球队: 美国
日期:2014-06-28 21:46:122014年世界杯参赛球队:喀麦隆
日期:2014-07-07 10:46:48马上有车
日期:2014-07-21 13:04:39马上加薪
日期:2014-07-29 10:04:19马上有对象
日期:2014-07-29 10:04:53马上有车
日期:2014-07-29 10:04:20马上加薪
日期:2014-08-26 22:26:06
15#
发表于 2014-1-16 20:21 | 只看该作者
good  

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
16#
发表于 2014-1-25 17:11 | 只看该作者
楼主不是原创的话,最好还是注明下转载

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
17#
 楼主| 发表于 2014-1-28 16:27 | 只看该作者
嗯。可以标注来源。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
18#
 楼主| 发表于 2014-1-28 16:29 | 只看该作者
我自己都忘了来源于哪里,当时觉得还不错,就在这里做了个记录。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表