次のような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が初めてで、迷っています。助けていただければ幸いです。また、さらに情報が必要な場合はお知らせください。