在Mongoose的forEach循环中添加属性

时间:2013-07-31 01:00:44

标签: javascript mongoose

让我说我的posts数组中的每个帖子都有两个属性名称和编号。它就像

var posts = [{name:"hey", number: 1}, {name:"foo", number:"2"}]

Javascript允许我在foreach循环中更改这些属性,如下所示:

posts.forEach(function(post){
    post.name = "bar"
});

我的数组变为:

var posts = [{name:"bar", number: 1}, {name:"bar", number:"2"}]

但它不允许我添加一个新的属性,如:

posts.forEach(function(post){
    post.adress = "bar"
});

我的对象保持不变。有没有办法在javascipt

中的foreach循环中添加属性

编辑:

这是在回调中使用mongoose发生的。

  Post.pagination(options, function(err, posts) {
    if (err) console.log(err)
    posts.forEach(function(post){
      post.votetype = 1;
    });
    console.log(posts);
    res.send({ posts : posts  })
  })

在未添加此votetype属性之后

1 个答案:

答案 0 :(得分:5)

问题是从Mongoose返回的数据是不可变的。 下面的代码未经测试,但应该提供一些关于如何使数据可变并修改它的提示。

关键是在要修改的Mongoose文档对象上调用toObject()

Post.pagination(options, function(err, posts) {
  if (err) console.log(err);

  var resultPosts = posts.map(function(post) {
    var tmpPost = post.toObject();

    // Add properties...
    tmpPost.votetype = 1;

    return tmpPost;
  });

  console.log(resultPosts);
  res.send({ posts : resultPosts  });
});
相关问题