学堂 学堂 学堂公众号手机端

MongoDB中groupby能用于什么,有哪些应用

lewis 1年前 (2024-04-01) 阅读数 5 #技术
在实际应用中,我们有时候会遇到“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能用于什么,有哪些应用”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。如果想要了解更多知识,欢迎关注博信,小编每天都会为大家更新不同的知识。
版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门