2016-08-02 13 views
0

Ich ist senden unter Code unter Verwendung von Daten zu erhalten, aus einer SammlungIterate aus mongodb Sammlung und api Anrufe tätigen und neue Schlüssel hinzufügen und Daten

Marketing.find({ 
    shopId: req.params.shopId, 
    locationId: req.params.locationId, 
    }).exec(function (err, campaigns) { 
    if (err) { 
     return next(err); 
    } else if (!campaigns) { 
     return next(new Error('Failed to load Campaigns '+ req.params.shopId)); 
    } 

ich einen API-Aufruf auf Kampagnen machen will Objekt i die Verwendung Code unten

 campaigns.forEach(function(item) { 


     async.waterfall([ 
    function (done) { 
     item.opens = "-"; 
     item.requests = "-"; 

    var currentDate = new Date(); 
    var formatedDate = currentDate.toISOString().slice(0,10); 
    var request = sg.emptyRequest(); 
    request.queryParams.aggregated_by = 'day'; 
    request.queryParams.limit = '1'; 
    request.queryParams.start_date = '2016-01-01'; 
    request.queryParams.end_date = formatedDate; 
    request.queryParams.offset = '1'; 
    request.queryParams.categories = item._id; 
    request.method = 'GET'; 
    request.path = '/v3/categories/stats'; 
    sg.API(request, function (response) { 
     response.body = JSON.parse(response.body); 
     done(err,response.body) 
    }); 
    }, 

    function (data,done) { 

     for(var i=0;i<data.length;i++){ 
         unique_opens = parseInt(unique_opens)+parseInt(data[i].stats[0].metrics.unique_opens); 
          opens = parseInt(opens)+parseInt(data[i].stats[0].metrics.opens); 
          requests = parseInt(requests)+parseInt(data[i].stats[0].metrics.requests); 
         } 
            if(unique_opens>=1 && requests>=1){ 
            item.clickrate = (unique_opens/opens)*100; 
            } 
         else{ 
          item.clickrate = 0; 
         } 


         item.opens = opens; 
         item.requests = requests; 
        console.log(item.opens); 
             opens = 0; 
             unique_opens = 0; 
             requests = 0; 
     console.log(item); 


     }, 
], function (error) { 
    if (error) { 
     //handle readFile error or processFile error here 
    } 
}); 





    }); 

Und am Ende muss ich

res.json(campaigns); 

Aber es die beiden neuen Schlüssel in jedem Index nicht hinzufügen [op ens & Anfrage]

+0

Meinten Sie die 'Karte()' Methode anstelle des 'foreach()' zu benutzen? – chridam

+0

hi @chridam .. nein, ich möchte nicht eine andere Liste machen .. möchte diese beiden Schlüssel in jedem Index der gleichen Kampagnen-Array anhängen – Aniket

Antwort

0

Verwenden map() wie folgt:

Marketing.find({ 
    shopId: req.params.shopId, 
    locationId: req.params.locationId, 
}).lean().exec(function (err, campaigns) { 
    if (err) { 
     return next(err); 
    } else if (!campaigns) { 
     return next(new Error('Failed to load Campaigns '+ req.params.shopId)); 
    } 
    campaigns = campaigns.map(function(item){ 
     return { 
      opens: 'SOMELOGIC', 
      requests: 'SOMELOGIC', 
      opens: item.opens, 
      requests: item.requests, 
     }; 
    }); 
    res.json(campaigns); 
} 
+0

hey @chridam Ich habe gerade meine Frage bearbeitet, so dass ich es besser erklären könnte ... . – Aniket