2017-05-09 3 views
0

mongodbが2つのコレクションを結合してデータを取得するための「少し」のクエリを作成しました。MongoDBレスポンスを操作するNodeJS

ゲーム:-includeは0,1または2

0排他的 1包括 2復帰することができURL

に2つのまたは3のparamsを挿入し、すべての

-netcode:ありデータをフィルタリングするためのキー -group:最初のパラメータ "include"で動作する別のオプションのキー

- 私のクエリは完全に機能し、イベントが発生した回数を返しますグループ。

- 問題がありますか?私はmongo dbの結果を扱うことができません、私はJSONに解析する必要があります。 私はJSでそれほど巧妙ではないので、どこに置くべきかわかりません。私は法人で働いているので、コードのいくつかはすでに行われていました。

{ 
     "events": [ 
     { 
      "_id": { 
      "group": "GFS-CAJEROS-INFINITUM-TELDAT-M1", 
      "event": "SNMP DOWN" 
      }, 
      "incidencias": 1 
     }, 
{ 
     "_id": { 
     "group": "GFS-CAJEROS-MPLS", 
     "event": "Proactive Interface Input Utilisation" 
     }, 
     "incidencias": 1209 
    }, 
    { 
     "_id": { 
     "group": "GFS-CAJEROS-MPLS", 
     "event": "Proactive Interface Output Utilisation" 
     }, 
     "incidencias": 1209 
    }, 
    { 
     "_id": { 
     "group": "GFS-CAJEROS-MPLS", 
     "event": "Proactive Interface Availability" 
     }, 
     "incidencias": 2199 
    }, 
    { 
     "_id": { 
     "group": "GFS-SUCURSALES-HIBRIDAS", 
     "event": "Proactive Interface Output Utilisation" 
     }, 
     "incidencias": 10 
    }, 

しかし、私は、それはこのように、JSON形式で融合させたい:

まあ、私の出力はこれですint型の値は、イベントの名前の横にあるチェック。

[ 

{ 

"group": "GFS-CAJEROS-MPLS", 
"Proactive Interface Input Utilisation" : "1209", 
"Proactive Interface Output Utilisation" : "1209", 
"Proactive Interface Availability" : "2199", 


}, 

{ 

"group": "GFS-SUCURSALES-HIBRIDAS", 

"Proactive Interface Output Utilisation" : "10", 


}, 

私はこの機能が正確にどのように動作するかを知らないので、私はこれを行うには良い方法がある¿、私は応答を管理する方法がわからない、NodejsとMongoDBのモジュールを使用していますか? jsonファイルを取得するのと同じように、別のjsを使用して生成しますか?

これは私が使用しているコードを、基本的に重要な部分です:

var events = db.collection('events'); 

events.aggregate([ 

    { $match : { netcode : data.params.netcode } }, 

    { 
     $lookup: 
     { 
      from: "nodes", 
      localField: "name", 
      foreignField: "name", 
      as: "event_joined" 


     } 

    }, 


    { $unwind: {path: "$event_joined"} }, 

    { $match : {"event_joined.group" : 

    {$in: 

    [ 
    groups[0] , 
    groups[1] , 
    groups[2] , 
    groups[3] , 
    groups[4] , 
    groups[5] , 
    groups[6] , 
    groups[7] , 
    groups[8] , 
    groups[9] , 
    ] 

    } 
} 

}, 










    { $group : { _id : {group:"$event_joined.group", event:"$event"}, incidencias: { $sum: 1} } }, 





]) 

       .toArray(function(err, result) { 
        if (err) { 
         console.log(err); 

        } else if (result) { 

         data.response.events = result; 


        } else { 
         console.log("No result"); 
        } 

答えて

3

あなたはJS上のデータの構造を変更する次に、あなたのパイプラインに{_id: "$_id.group", events: {$push : {name: "$_id.event", incidencias: "$incidencias"}}}

を別の$グループを追加する必要があります"Array.map"のコード。

data.response.events = data.response.events.map(function (eve){ 
var obj = { 
    "group": eve.group 
}; 
eve.events.forEach(function (e){ 
    obj[e.name] = e.incidencias 
}) 

return obj; 
}) 
+1

ニースアプローチ( - : - – haim770

関連する問題