mongodb使用group by的案例分析
这篇文章将为大家详细讲解有关mongodb使用group by的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
mongodb使用group by:
我们比较熟悉的group by 的sql语句select key from table groupby key,而mongoDB没提供SQL那样通过Group By就轻松实现数据库的分组功能,我们通过接口来实现的
db.collection.group({key,reduce,initial[,keyf][,cond][,finalize]})
1.MonogoDB数据库中添加订单的数据
/*0*/{"_id":ObjectId("552a330e05c27486b9b9b650"),"_class":"com.mongo.model.Orders","onumber":"002","date":ISODate("2014-01-03T16:03:00Z"),"cname":"zcy","item":{"quantity":1,"price":4.0,"pnumber":"p002"}}/*1*/{"_id":ObjectId("552a331d05c275d8590a550d"),"_class":"com.mongo.model.Orders","onumber":"003","date":ISODate("2014-01-04T16:03:00Z"),"cname":"zcy","item":{"quantity":10,"price":2.0,"pnumber":"p001"}}/*2*/{"_id":ObjectId("552a333105c2f28194045a72"),"_class":"com.mongo.model.Orders","onumber":"003","date":ISODate("2014-01-04T16:03:00Z"),"cname":"zcy","item":{"quantity":30,"price":4.0,"pnumber":"p002"}}/*3*/{"_id":ObjectId("552a333f05c2b62c01cff50e"),"_class":"com.mongo.model.Orders","onumber":"004","date":ISODate("2014-01-05T16:03:00Z"),"cname":"zcy","item":{"quantity":5,"price":4.0,"pnumber":"p002"}}
2.MongoDB实现分组并统计
1)我们要对日期和产品编码进行分组,并计算相同的产品的数量
Sql语句:
Selectdate,pnumber,sum(quantity)astotalfromorders,itemsgroupbydate,pnumber
(少了两张表的关联的条件)
MongoDB:db.orders.group({key:{date:1,'item.pnumber':1},initial:{"total":0},reduce:functionReduce(doc,out){out.total+=doc.item.quantity}});
结果:
2)实现一天卖出了多少个产品,金额是多少,平均价格是多少
db.orders.group({key:{date:1},initial:{"total":0,"money":0},reduce:functionReduce(doc,out){out.total+=doc.item.quantity;out.money+=doc.item.quantity*doc.item.price;},finalize:functionFinalize(out){out.avg=out.money/out.totalreturnout;}});
结果:
3)keyf的使用
keyf 对日期进行处理并以作为key来进来分组
db.orders.group({keyf:function(doc){return{'month':doc.date.getMonth()+1};},initial:{"total":0,"money":0},reduce:functionReduce(doc,out){out.total+=doc.item.quantity;out.money+=doc.item.quantity*doc.item.price;},finalize:functionFinalize(out){out.avg=out.money/out.totalreturnout;}});
结果:
关于mongodb使用group by的案例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。