Итерация из коллекции mongodb, вызов API, добавление новых ключей и отправка данных.

0

Я использую ниже код для получения данных из коллекции

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

Я хочу сделать api-вызов объекта кампаний. Я использую приведенный ниже код.

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





    });  

И в конце я делаю

 res.json(campaigns);

Но он не добавляет два новых ключа в каждом индексе [открывает & запрос]

  • 0
    Вы хотели использовать метод map() вместо forEach() ?
  • 0
    привет @ chridam .. нет я не хочу создавать другой список .. хочу добавить эти два ключа в каждый индекс одного и того же массива кампаний
Теги:
express

1 ответ

0

Используйте map() следующим образом:

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
    эй @chridam я только что отредактировал свой вопрос, чтобы я мог объяснить его лучше ....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню