MongoDB中groupby能用于什么,有哪些应用
在实际应用中,我们有时候会遇到“MongoDB中group by能用于什么,有哪些应用”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“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.total returnout; } });
结果:
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.total returnout; } });
结果:
以上就是关于“MongoDB中group by能用于什么,有哪些应用”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。如果想要了解更多知识,欢迎关注博信,小编每天都会为大家更新不同的知识。
版权声明
本文仅代表作者观点,不代表博信信息网立场。