Mongodb Aggregate,MapReduce Sample

来源:互联网 发布:在线制作淘宝商品图片 编辑:程序博客网 时间:2024/05/26 02:55

数据格式:

{

  "_id" : 1,
  "durationId" : 201505181130,
  "feeds" : {
  
    "9" : {
      "CommentUserIds" : [
        3
      ],
      "CreateTime" : "201503282000",
      "WeightPerDuration" : 713.7724609375
    },
    "10" : {
      "LikeUserIds" : [
        4
      ],
      "CreateTime" : "201503281930",
      "WeightPerDuration" : 713.7719116210938
    }


        }

}

{

  "_id" : 2,
  "durationId" : 201505181200,
  "feeds" : {
  
    "9" : {
      "CommentUserIds" : [
        3
      ],
      "CreateTime" : "201503282000",
      "WeightPerDuration" : 713.7724609375
    },
    "10" : {
      "LikeUserIds" : [
        4
      ],
      "CreateTime" : "201503281930",
      "WeightPerDuration" : 713.7719116210938
    }


        }

}


Aggregate feedId为9的数组去重相加:

db.feed.aggregate( {$match:{"durationId":{$gt:1}} ,{$project: {commentWeight: { $size:{$ifNull: ["$feeds.9.CommentUserIds",[]]} }, likeWeight: { $size:{$ifNull: ["$feeds.9.LikeUserIds",[]]} }, shareWeight: { $size:{$ifNull: ["$feeds.9.ShareUserIds",[]]} }, viewWeight: { $size:{$ifNull: ["$feeds.9.ViewUserIds",[]]} }, detailWeight: { $size:{$ifNull: ["$feeds.9.DetailUserIds",[]]} }} })


MapReduce 根据feedId分组,求WeightPerDuration和:

mr = db.runCommand({
  "mapreduce" : "feed",
  "map" : function() {
    for (var key in this.feeds) {
      emit(key, this.feeds[key].WeightPerDuration);
    }
  },
  "reduce" : function(key, values) { return Array.sum(values); },
    "query" : { durationId : {$gte:1}, durationId : {$lte:1} },
      "out": "feed" + "_keys"
})



0 0