【问题标题】:Why i can`t change my object with .map from mongo?为什么我不能用 .map 从 mongo 更改我的对象?
【发布时间】:2018-12-20 20:31:12
【问题描述】:

我正在尝试在对象中写入新版本的日期。 一切都正确输出到控制台,但结果对象根本没有被覆盖。

Aircraft.find({leave: true}, (err, resp) => {
    result = resp;

    result = result.map((obj) => {
        let tmp = new Date(obj.timeArrival);
        tmp = moment(obj.timeArrival).format('dddd, MMMM DD YYYY');
        console.log(obj.timeArrival); // 2016-05-18T16:00:00.000Z
        console.log(tmp); // Wednesday, May 18 2016
        obj.timeArrival = tmp;
        console.log(obj.timeArrival); // 2016-05-18T16:00:00.000Z
        return obj;
    })
    res.render("departed.hbs", {
        us: result
    });
})

result 还是老了!

【问题讨论】:

  • console.log(obj.timeArrival); 第二个控制台显示循环内的旧值?
  • 是的,和评论一模一样
  • 您是否尝试过将lean() 用作Aircraft.find({ leave: true }).lean().exec(function(err, resp) { ... });
  • 我测试了您的代码的改编版本,它按预期工作,将 'Wednesday, May 18 2016' 设置为字符串字段或日期字段。

标签: node.js mongodb date mongoose


【解决方案1】:

在 map 函数中创建一个新的 json 对象。

Aircraft.find({leave: true}, (err, resp) => {
  result = resp;

  result = result.map((obj) => {
    var new_obj = {};
    new_obj = obj;
    let tmp = new Date(obj.timeArrival);
    tmp = moment(obj.timeArrival).format('dddd, MMMM DD YYYY');
    console.log(obj.timeArrival); // 2016-05-18T16:00:00.000Z
    console.log(tmp); // Wednesday, May 18 2016
    new_obj.timeArrival = tmp;
    console.log(obj.timeArrival); // 2016-05-18T16:00:00.000Z
    return new_obj ;
  })
  res.render("departed.hbs", {
    us: result
  });
})

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 2021-09-15
    • 1970-01-01
    • 2020-05-14
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多