如何在mongodb中以一对多的关系连接三个集合…可能是mapreduce或任何其他方式?

如何在mongodb中以一对多的关系连接三个集合…可能是mapreduce或任何其他方式?,mongodb,join,mapreduce,jointable,Mongodb,Join,Mapreduce,Jointable,我有三个系列看起来像 用户:用户的主机名、用户的mac地址、第一次看到的用户 路由器:路由器\u mac、路由器\u ip、路由器\u名称 会话:用户mac、路由器mac、用户ip、用户持续时间(许多不同的用户和路由器以不同的组合) 所以我想用这些表的所有信息创建一个新集合。。。我希望它能以这样一种方式加入,对于每个会话,我可以将路由器信息和用户信息附加到会话……当前会话集合中有300多万个会话 地图功能 router_map = function(){ var values = {

我有三个系列看起来像

用户:用户的主机名、用户的mac地址、第一次看到的用户

路由器:路由器\u mac、路由器\u ip、路由器\u名称

会话:用户mac、路由器mac、用户ip、用户持续时间(许多不同的用户和路由器以不同的组合)

所以我想用这些表的所有信息创建一个新集合。。。我希望它能以这样一种方式加入,对于每个会话,我可以将路由器信息和用户信息附加到会话……当前会话集合中有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'}})
减少功能

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的新手,我失去了任何帮助,将不胜感激。如果您需要更多信息,也请告诉我。

这是一个非常无聊的问题,但我还是会问它-?数据库服务器上没有加入MongoDB这样的事情,也没有解决方法。您需要在应用程序代码中执行此操作。因此,如果我使用php从数据库中的每个不同集合中提取信息,然后将其存储到我创建的一个新集合中。。这会有效吗???…这会有效吗???