2017-05-09 4 views
0

Ich machte eine "kleine" Abfrage für Mongodb, um zwei Sammlungen zu verbinden und Daten abzurufen.MongolDB Antwort bearbeiten NodeJS

Das Spiel: insert 2 oder 3 params auf einer URL

-include 0,1 oder 2 sein können

0 exklusive 1 inklusive 2 Rückkehr alle

-netcode: ist ein Schlüssel zum Filtern von Daten -Gruppe: ein weiterer optionaler Schlüssel, der mit dem ersten Parameter "include" funktioniert

-Meine Abfrage funktioniert einwandfrei, gibt zurück, wie oft ein Ereignis in einem CER aufgetreten ist Gruppe.

-Das Problem? Ich kann nicht mit dem Ergebnis von Mongo db arbeiten, ich muss es zu JSON analysieren. Ich bin nicht so clever bei JS, also weiß ich nicht, wo ich es hinstellen soll. Da ich in der Gesellschaft arbeite, wurde ein Teil des Codes bereits erledigt.

Nun meine Ausgabe ist dies:

{ 
     "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 
    }, 

Aber ich will es in einem JSON-Format fusioniert, wie folgt aus: Überprüfen der int-Wert für den Namen des Ereignisses nächsten ist.

[ 

{ 

"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", 


}, 

Ich verwende NodeJS und das mongodb Modul, da ich weiß nicht, wie diese Funktion genau funktioniert, ich weiß nicht, wie die Antwort zu verwalten, ¿gibt es einen besseren Weg, dies zu tun? wie bekomme ich die JSON-Datei, mit einem anderen js, um es zu generieren?

Dies ist der Code ich verwende, im Grunde der wichtige Teil:

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"); 
        } 

Antwort

3

Sie weitere $ Gruppe auf der JS zu Ihrer Pipeline hinzufügen sollten {_id: "$_id.group", events: {$push : {name: "$_id.event", incidencias: "$incidencias"}}}

Dann die Struktur Ihrer Daten ändern Code mit "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

Schöner Ansatz (-: – haim770