无法在Javascript

时间:2016-03-25 08:39:12

标签: javascript mongodb mongoose

JavaScript #mongoDB #express #nodejs

我有一个从mongoDB收到的对象数组。收到“区域”数组后,我想添加一个键到数组中的每个对象。 (添加的键将是日期值的本地化格式,稍后将在呈现HTML页面时使用该日期值。)

// we are inside a express controller for a webapp here
var moment = require('moment');

exports.getAllAreas = function(req, res) {
  AreaModel.find().sort('-updatedAt').exec(function(err, allAreas) {
    if (err) return next(err);
    console.log("area table data:\n%s", JSON.stringify(allAreas, null, '  '));
    for (var i = allAreas.length - 1; i >= 0; i--) {
      allAreas[i]['createdAt_View'] = moment(allAreas[i].createdAt).format('L');
    };
    console.log("area table data ###:\n%s", allAreas);
    res.json(allAreas);
  });
};

来自mongoDB(“allAreas”数组)的数据是:

[
  {
    "_id": "56f0f7cdd99f646c99ad1e2f",
    "updatedAt": "2016-03-19T13:02:19.000Z",
    "createdAt": "2016-03-19T13:02:19.000Z",
    "description": "Very important topics",
    "title": "Another Area"
  },
  {
    "_id": "56f0f7eed99f646c99ad1e30",
    "updatedAt": "2016-03-01T13:02:19.000Z",
    "createdAt": "2016-01-19T13:02:19.000Z",
    "description": "Even more",
    "title": "Area2"
  }
]

我的问题:在for循环之后,allAreas数组及其内容根本没有改变!

更多旁注:   - 我使用(后向)for循环而不是.foreach子句,因为这更快。   - “moment”是一个可以本地化数据值的JS库

mongoDB结果在Javascript中是不可变的吗? 我在这里错过了按值或按引用的内容吗?我只是找不到它。

解决方案(积分来自@RayonDabre)

Mongoose(我使用的OR-mapper)从查询中返回Mongoose Document。因此回调中的变量 allAreas 实际上是一个“更大”的Javascript对象,您不能以这种方式添加属性。

当您向Mongoose Query Builder添加.lean()时,mongoose会返回一个简单的javascript关联数组,您可以将其添加到。

感谢所有stackoverflow成员帮助这么快!

0 个答案:

没有答案