加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB中group by能用于什么,有什么应用

发布时间:2023-08-30 14:44:16 所属栏目:系统 来源:
导读:在实际应用中,我们有时候会遇到“MongoDB中group by能用于什么,有哪些应用”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“MongoDB中group by能用于什么,有哪些应用&rdqu
在实际应用中,我们有时候会遇到“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;
 
  }
 
});
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章