0

我有三个看起来像的系列

用户:user_hostname、user_mac_address、user_first_seen

路由器:router_mac、router_ip、router_name

session : user_mac, router_mac, user_ip, user_duration(许多不同的用户和路由器的不同组合)

所以我想用这些表的所有信息创建一个新集合......我希望它以这样一种方式加入,对于每个会话,我可以将路由器信息和用户信息附加到会话...... .当前会话集合中有超过 300 万个会话。

地图功能

router_map = function(){
var values = {
              router_ip :this.router_ip
              router_name: this.router_name};
emit(this.router_mac, values);};

session_map = function(){
var values = {
              user_duration = this.user_duration
              user_mac = this.user_mac
              user_ip= this.user_ip};
emit(this.router_mac,values);};  

减少功能

r=function(key,values){
 var result = {};
 values.forEach(function(value){
 var field ;
     for(field in value){
        if (value.hasOwnProperty(field)){
        result[field] = value [field];
}}});
return result;};


res=db.router.mapReduce(router_map,r,{out :{reduce :'routersession'}})
res=db.session.mapReduce(session_map,r,{out :{reduce :'routersession'}})

结果

db.routersession.find();


routersession : "_id"=*router mac* , values { "routerip" =data, "routername" = data, "user_duration"= data,"user_ip" = data,"usermac"=data}

我只获得与路由器链接的第一个会话,我希望路由器下的所有会话都与它关联....当我换一种方式时它不起作用...我仍然想加入第三个表.

我还想查询每个路由器的唯一会话总数。

我是 mongodb 的新手,我迷失了任何帮助将不胜感激。如果您需要更多信息,也请告诉我。

4

0 回答 0