Mongodb Aggregate,MapReduce Sample

数据格式:

{

  "_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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值