您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)mongodb使用group by的案例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
mongodb使用group by:
我們比較熟悉的group by 的sql語句select key from table groupby key,而mongoDB沒提供SQL那樣通過Group By就輕松實現(xiàn)數(shù)據(jù)庫的分組功能,我們通過接口來實現(xiàn)的
db.collection.group({ key, reduce, initial[, keyf] [, cond] [, finalize] })
1.MonogoDB數(shù)據(jù)庫中添加訂單的數(shù)據(jù)
/* 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實現(xiàn)分組并統(tǒng)計
1)我們要對日期和產(chǎn)品編碼進行分組,并計算相同的產(chǎn)品的數(shù)量
Sql語句:
Select date, pnumber,sum(quantity) as total from orders,items group by date, pnumber
(少了兩張表的關(guān)聯(lián)的條件)
MongoDB: db.orders.group({ key: { date:1,'item.pnumber':1}, initial : {"total":0}, reduce : function Reduce(doc, out) { out.total+=doc.item.quantity } });
結(jié)果:
2)實現(xiàn)一天賣出了多少個產(chǎn)品,金額是多少,平均價格是多少
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; } });
結(jié)果:
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; } });
結(jié)果:
關(guān)于mongodb使用group by的案例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。