MongoDB聚合查詢(Aggregate)練習筆記

由於項目需要使用到MongoDB,花了一些時間來練習Mongo的聚合操作,實際項目中是使用Spring-data/mongodb,這裏先寫sql。

整個練習是基於某博主的一個Mongodb練習小項目,其Collection文檔結構如下:

{
    "_id" : ObjectId("5af2e8f2064079ef797e22a7"),
    "title" : "title_10",
    "url" : "url_10",
    "ptimes" : "2014-02-12 20:11:53",
    "ptime" : NumberLong(1392207113828),
    "pdate" : ISODate("2014-02-12T12:11:53.828Z"),
    "pmedia" : "publishMedia_10",
    "area" : "10240502",
    "ckey" : [
        "22",
        "26",
        "A102",
        "A202",
        "A101",
        "A201"
    ],
    "eval" : 0,
    "mpro" : 1,
    "mtype" : 10,
    "level" : 7

}

可自行添加多條記錄

group:

db.news.group({
key:{"level":1},
initial:{"count":0},
$reduce:function(doc,out){out.count++;},
$finalize:function(out){return out;}
})

aggregate:

db.news.aggregate([{$group:{_id: null, sumCount:{$sum:"$eval"}}}])

db.news.aggregate([{$group:{_id: null, sumCount:{$sum:"$level"}}}])

db.news.aggregate([{$group:{_id: "$eval", total:{$sum:"$level"}}},{$limit:1}])

db.news.aggregate([{$group:{_id: "$eval", total:{$sum:"$level"}}}, {$sort:{_id:-1}}])

db.news.aggregate([{$match:{area: "1024"}}])

db.news.aggregate([{$project:{title:1, ptimes:1, _id:0, url:1}}])

db.news.aggregate([{$project:{"retitle":"$title", "reptimes":"$ptimes", "reurl":"$url", _id:0}}])

db.news.aggregate([{$project:{"total":{$add:["$mtype","$level"]}}}])

db.news.aggregate([{$project:{total:{$add:["$mtype","$level"]}}}])

db.news.aggregate([{$project:{total:{$subtract:[{$add:["$mtype","$level"]},"$mpro"]}}}])

db.news.aggregate([{$project:{chenfa:{$multiply:["$level","$mtype","$mpro"]}}}])

db.news.aggregate([{$project:{divi:{$divide:["$mtype","$mpro"]}}}])

db.news.aggregate([{$project:{"retitle":"$title","reptimes":"$ptimes","rearea":"$area","relevel":"$level"}},{$match:{"relevel":{$lte: 2},"reptimes":{$gte:"2014-02-12 20:11:53" , $lte:"2014-03-12 20:11:53"}}}])

db.news.aggregate([{$project:{"retitle":"$title","reptimes":"$ptimes","rearea":"$area","relevel":"$level"}},{$match:{"relevel":{$lte: 2},"reptimes":{$gte:"2014-02-12 20:11:53",$lte:"2014-03-12 20:11:53"}}},{$group: {_id:null,count:{$sum:1}}}])
以上sql基於$project、$match、$group等常用篩選、聚合操作,如有幫助,不甚榮幸。。。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章