MongoDB中group by能用于什么,有哪些应用
Admin 2022-05-27 群英技术资讯 1321 次浏览
在实际应用中,我们有时候会遇到“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语句:
Select date, pnumber,sum(quantity) as total from orders,items group by date, pnumber
(少了两张表的关联的条件)
MongoDB:
db.orders.group({
key: { date:1,'item.pnumber':1},
initial : {"total":0},
reduce : function Reduce(doc, out) {
out.total+=doc.item.quantity
} });
结果:

2)实现一天卖出了多少个产品,金额是多少,平均价格是多少
db.orders.group({
key: {date:1},
initial :{"total":0,"money":0},
reduce : function Reduce(doc, out) {
out.total+=doc.item.quantity;
out.money+=doc.item.quantity*doc.item.price;
},
finalize : function Finalize(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 : function Reduce(doc, out) {
out.total+=doc.item.quantity;
out.money+=doc.item.quantity*doc.item.price;
},
finalize : function Finalize(out) {
out.avg=out.money/out.total
returnout;
}
});
结果:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了mongodb分片技术,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
不少人都有遇到误删数据库的情况,因此下面小编就给大家分享两个恢复误删Mongodb数据库的方法,虽然不是所有删除都能够恢复,但是我们能够尽量去挽回损失,下面我们就一起来看看吧。
mongodb快的原因:写操作快是因为只要在内存里完成就可以返回给应用程序。读操作快是因为MongoDB要求你常用的数据可以在内存里装下,读取时只需读取内存即可。
MongoDB使用insert方法插入内容文档:1、insertOne插入一个文档;2、insertMany插入多个文档;3、insert插入一或多个文档。
mongodb数据之间的转换:1、用toString()将int转换为string类型;2、用ISODate()将string类型转换为Date类型;3、用NumberInt()将string转换为int类型。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008