Как запустить функцию для каждого элемента в массиве или записать объекты массива индивидуально в Mongoose - PullRequest
0 голосов
/ 01 февраля 2019

Привет всем. Я пытаюсь создать API для расчета дохода от службы калькулятора. Все, что он делает по сути, - это получает значения из дБ, которые нужны калькулятору, и пропускает их через него и получает результирующие значения.Однако мне нужно записать результаты обратно в дБ для ведения журнала.

Однако у меня возникают некоторые проблемы

Я пытаюсь передать некоторые объекты из массива Mongoose в службу URL-адресов JSON APIиспользуя axios get, и у меня возникают проблемы при записи результирующего массива в мой Mongoose dB

Может кто-нибудь помочь мне с тем, что мне не хватает?

См. ниже

/* Users : 
  _id : 5cac
  username: sample
  email: email@email.com
  orderHistory: [
  {xmr_hr: 9000}, 
  {xmr_hr: 2000}, 
  {xmr_hr: 3000}
  ],
  profitHistory:[
  {
    xmr_usd_gross:
  }
  ]
  
 */


var email = "email@email.com"
var id = "5cac"


function xmr(callback){
function getUsers(){ 
  var cursor = User.find({email: email}, function (err, users) {
}).cursor();
return cursor;
}



var cursor = getUsers();
cursor.on('data', function(name){



     const xmr_hr= name.orderHistory.map(element => element.xmr_hr);





var xmrLength = xmr_hr.length;
for (var i = 0; i < xmrLength; i++) {

console.log(xmr_hr[i]
// returns [9000,2000,3000]


        
// variables
var algo = "cn8"
var hr = xmr_hr

var wttURL = "wtt.com/json" + algo + hr[i]

axios.get(wttURL)
  .then((response) => {
    var btcGrossRevenue = response.data.coins.Monero.btc_revenue
    console.log(btcGrossRevenue)
    // runs through each value in array and returns revenue [0.06, 0.02, 0.03]

// below is my problem
var updateProfits = [{
    xmr_usd_gross : btcGrossRevenue,
        }]
      
      
        
      
    User.findByIdAndUpdate(id, {upsert: false, "$addToSet": { 'profitHistory': updateProfits}},
      function(err, user) {
        if(err) { console.log(err) }
        else {
          console.log(user.length)
      };
    })
  })
}


// initial callback
for (var v = 1; v < 2; v++)
xmr(function(v){})


// cronJob and callback continuation
var xmrJob = new cron.CronJob('* 10 * * * *', function() {  
  console.log('Function executed!');
  
for (var v = 1; v < 2; v++) // amount of times to run function
xmr(function(v){})

}, null, true);

xmrJob.start

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

Я думаю, что либо есть способ сделать это, просто запустив функцию обратного вызова индивидуально для каждого элемента объекта в массиве, либо найдя возможность разбирать полученный массив и записывать их последовательно.

Я бы хотел, чтобы мои Коллекции выглядели так, как только все написано

    /* Users : 
      _id : 5cac
      username: sample
      email: email@email.com
      orderHistory: [
      {xmr_hr: 9000}, 
      {xmr_hr: 2000}, 
      {xmr_hr: 3000}
      ],
      profitHistory:[
      {xmr_usd_gross: 0.06},
      {xmr_usd_gross: 0.03},
      {xmr_usd_gross: 0.02},
      ]
      
     */

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете использовать функцию Map.

const fn = (item) => {
  return item *10;
}
[1,2,3,4,5].map( fn );

в этом простом примере функция fn выполняется для каждого элемента на карте и возвращает значение.Если вы назначаете его чему-то, вы можете использовать это значение в результирующем массиве.

Я, очевидно, разделил их, но вы также можете легко сделать их встроенными .... или использовать функцию forEach.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

[1,2,3,4,5].map( item => item * 10 );

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

[1,2,3,4,5].forEach( item => { 
  console.log( item * 10 ); 
});

Ваши массивы могут быть чем угодно, объектами, числами и т. Д. И аналогичным образом ... вы можете делать все что угодно в функциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...