迭代来自节点中的mongoose的数据

时间:2017-05-28 19:22:12

标签: node.js express mongoose

我有这个小提琴,说明我想做什么,它按预期工作: https://jsfiddle.net/mbLwsnak/

它所做的就是遍历一个对象数组,并添加一个键值对。

我的节点应用程序中有相同的代码,但它不起作用。即使代码几乎相同,新对也不会添加到对象中,因此我认为它必须是上下文。

Schema.find()
.then(function(currencydata){

    var data = currencydata;

    data.forEach(function(obj){
        obj.thing = "Thing";
    })

    console.log(data);
    mdata.currencydata = data;

})
.then(function(result){
    res.render('index', mdata);
})

因此,我能想到的唯一不同之处在于,这一切都在异步函数中。我甚至尝试将日志放在setTimeout中,以防异步,但没有变化。

编辑: currencydata是由mongoose模式返回的对象数组。它看起来像这样:

[{
  country: 'Canada',
  currency: 'CAD',
  cost: 5.98,
  exchangerate: 1.33,
  value: -10.9
}, {
  country: 'United States',
  currency: 'USD',
  cost: 5.06,
  exchangerate: 1,
  value: 0
}, {
  country: 'India',
  currency: 'INR',
  cost: 170,
  exchangerate: 68.33,
  value: -50.8
}]

1 个答案:

答案 0 :(得分:0)

  • 使用lean()将mongoose文档转换为普通的javascript 对象

  • 然后在第一个然后()你需要返回一个承诺,以便 next then()将获得返回值。

在promise对象中,解析拒绝函数在被调用时,分别解析或拒绝承诺。 Promise Reference

Schema.find()
    .lean()
    .then((currencydata, err) => {
        return new Promise((resolve, reject) => {
            currencydata.forEach(data => {
                data.thing = 'Thing';
            });
            resolve(currencydata);
        });
    })
    .then((newdata, err) => {
        res.render('index', newdata);
    });