javascript - 如何在 Mongoose 上为数组中的每个项目运行函数或单独写入数组对象

标签 javascript arrays node.js mongoose axios

大家好,我正在尝试创建一个 API 来计算计算器服务的收入,它本质上所做的就是从计算器所需的 dB 中获取值,然后将它们传递给它并获取结果值。然而,我需要将结果写回到 dB 中以进行记录。

但是我遇到了一些问题

我正在尝试使用 axios get 将一些对象从 Mongoose 数组传递到 JSON API URL 服务,但在将结果数组写入我的 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},
      ]
      
     */

任何帮助将不胜感激

最佳答案

您可以使用 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 ); 
});

你的数组可以是任何东西,对象,数字等等,同样......你可以在函数中做任何事情。

关于javascript - 如何在 Mongoose 上为数组中的每个项目运行函数或单独写入数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472244/

相关文章:

javascript - 在 MVC 中从 JavaScript 调用带有字符串类型参数的操作

javascript - 通过 Mailchimp 返回错误、Javascript 和 php 提交电子邮件

javascript - 如何禁用带有单选按钮的组合框(javascript)

javascript - 如何调用一组对象中同一列的属性? ( Node .js)

python - 列出二维数组 numpy 中具有特定值的所有 x,y 坐标

javascript - 在 sinon 中使用异步回调 stub 方法

javascript - 如何在 Node.js 上编写快速排序

javascript - 读取 HTML 对象标签中的数据

javascript - jQuery ajax() 上的多维数组 [key] 表示法失败

javascript - 如何使用 firebase 管理员让所有用户自定义声明为管理员/版主?