MapReduce处理数据(用户使用过的产品)

来源:互联网 发布:ssh2权限管理系统源码 编辑:程序博客网 时间:2024/04/30 04:36

数据格式如下:


/* 0 */
{
  "_id" : 1,
  "logId" : "078EF19407AC4798882A7588B358B517",
  "logType" : 0,
  "username" : "0_{2001",
  "userIdentityIds" : -1,
  "productId" : 5,
  "version" : "11.0.4",
  "versionVal" : NumberLong("110000000004"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.26",
  "loginInIP" : "192.168.2.26",
  "loginTime" : new Date("21/8/2014 09:36:38"),
  "logoutTime" : new Date("21/8/2014 09:36:38"),
  "addTime" : new Date("21/8/2014 09:36:38"),
  "hardwareCodes" : ["dcc952a3855e0ca72e57c0632e0cd45e"],
  "enterpriseId" : 0
}


/* 1 */
{
  "_id" : 2,
  "logId" : "4cb2ca79-743b-4791-8afe-cb5441745240",
  "logType" : 1,
  "username" : "0_elaine_yong",
  "userIdentityIds" : -1,
  "productId" : 3,
  "version" : "21.2.0",
  "versionVal" : NumberLong("210000200000"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.22",
  "loginInIP" : "192.168.2.22",
  "loginTime" : new Date("21/8/2014 09:37:05"),
  "logoutTime" : new Date("21/8/2014 09:37:05"),
  "addTime" : new Date("21/8/2014 09:37:05"),
  "hardwareCodes" : ["9290dc7e739cacad3460497fc0db1945"],
  "enterpriseId" : 0
}


/* 2 */
{
  "_id" : 3,
  "logId" : "4cb2ca79-743b-4791-8afe-cb5441745240",
  "logType" : 1,
  "username" : "0_elaine_yong",
  "userIdentityIds" : -1,
  "productId" : 3,
  "version" : "21.2.0",
  "versionVal" : NumberLong("210000200000"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.22",
  "loginInIP" : "192.168.2.22",
  "loginTime" : new Date("21/8/2014 09:37:17"),
  "logoutTime" : new Date("21/8/2014 09:37:17"),
  "addTime" : new Date("21/8/2014 09:37:17"),
  "hardwareCodes" : ["9290dc7e739cacad3460497fc0db1945"],
  "enterpriseId" : 0
}


/* 3 */
{
  "_id" : 4,
  "logId" : "4cb2ca79-743b-4791-8afe-cb5441745240",
  "logType" : 1,
  "username" : "0_elaine_yong",
  "userIdentityIds" : -1,
  "productId" : 5,
  "version" : "21.2.0",
  "versionVal" : NumberLong("210000200000"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.22",
  "loginInIP" : "192.168.2.22",
  "loginTime" : new Date("21/8/2014 09:37:29"),
  "logoutTime" : new Date("21/8/2014 09:37:29"),
  "addTime" : new Date("21/8/2014 09:37:29"),
  "hardwareCodes" : ["9290dc7e739cacad3460497fc0db1945"],
  "enterpriseId" : 0
}


/* 4 */
{
  "_id" : 5,
  "logId" : "078EF19407AC4798882A7588B358B517",
  "logType" : 0,
  "username" : "0_{2001",
  "userIdentityIds" : -1,
  "productId" : 2,
  "version" : "11.0.4",
  "versionVal" : NumberLong("110000000004"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.26",
  "loginInIP" : "192.168.2.26",
  "loginTime" : new Date("21/8/2014 09:40:27"),
  "logoutTime" : new Date("21/8/2014 09:40:27"),
  "addTime" : new Date("21/8/2014 09:40:27"),
  "hardwareCodes" : ["dcc952a3855e0ca72e57c0632e0cd45e"],
  "enterpriseId" : 0
}


/* 5 */
{
  "_id" : 6,
  "logId" : "078EF19407AC4798882A7588B358B517",
  "logType" : 0,
  "username" : "0_{2001",
  "userIdentityIds" : -1,
  "productId" : 5,
  "version" : "11.0.4",
  "versionVal" : NumberLong("110000000004"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.26",
  "loginInIP" : "192.168.2.26",
  "loginTime" : new Date("21/8/2014 09:41:41"),
  "logoutTime" : new Date("21/8/2014 09:41:41"),
  "addTime" : new Date("21/8/2014 09:41:41"),
  "hardwareCodes" : ["dcc952a3855e0ca72e57c0632e0cd45e"],
  "enterpriseId" : 0
}


/* 6 */
{
  "_id" : 7,
  "logId" : "078EF19407AC4798882A7588B358B517",
  "logType" : 0,
  "username" : "0_{2001",
  "userIdentityIds" : -1,
  "productId" : 11,
  "version" : "11.0.4",
  "versionVal" : NumberLong("110000000004"),
  "lockNumber" : "91487400000009bc",
  "isLegalCopy" : 1,
  "provinceId" : -2,
  "cityId" : -2,
  "loginOutIP" : "192.168.2.26",
  "loginInIP" : "192.168.2.26",
  "loginTime" : new Date("21/8/2014 09:41:52"),
  "logoutTime" : new Date("21/8/2014 09:41:52"),
  "addTime" : new Date("21/8/2014 09:41:52"),
  "hardwareCodes" : ["dcc952a3855e0ca72e57c0632e0cd45e"],
  "enterpriseId" : 0
}


统计出每个用户使用过的产品,一个用户只能有一条数据,产品使用数组存储
要求增量处理,比如第一次执行处理数据到3条,那么条件则是_id>0并且_id<4
下次处理从4开始,_id>3并且<最大ID


db.testlogin.mapReduce(
function() {
   var array = new Array();
   array.push(this.productId);
   emit(
this.username,
{"username":this.username,"productIds": array}
   ); 
},
function(key, values) {
    //判断产品ID是否存在,存在则不添加
    var checkProductIdExists = function(pid,pids){
var flag = false;
for(var j in pids){
if(pids[j] == pid){
    flag = true;
    break;
}
}
return flag;
   }
  var array = new Array();
  var reduced = {username:'', productIds:array}; 

 for(var i in values){
var obj = values[i];
for(var j in obj.productIds){
if(!checkProductIdExists(obj.productIds[j],reduced.productIds)){
reduced.productIds.push(obj.productIds[j]);
reduced.username = values[i].username;
}
}
}
return reduced;
},
{
out:{"reduce":"testloginMapReduce"},
query:{_id:{$gt: 0}},

}

);




统计结果:
{
  "_id" : "0_elaine_yong",
  "value" : {
    "username" : "0_elaine_yong",
    "productIds" : [5.0, 3.0]
  }
}


/* 1 */
{
  "_id" : "0_{2001",
  "value" : {
    "username" : "0_{2001",
    "productIds" : [2.0, 5.0, 11.0]
  }
}





0 0