0

次のような3つのコレクションがあります

ユーザー: user_hostname、user_mac_address、user_first_seen

ルーター: router_mac、router_ip、router_name

セッション: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}

ルーターにリンクされた最初のセッションのみを取得します。ルーターに関連付けられたルーターの下のすべてのセッションが必要です....逆にすると、機能しません...そして、3番目のテーブルに参加したい.

また、各ルーターの一意のセッションの総数などのクエリも実行したいと思います。

私はmongodbが初めてで、迷っています。助けていただければ幸いです。また、さらに情報が必要な場合はお知らせください。

4

0 に答える 0