因此,我正试图在返回一个用户对象之前向其添加一个字段,但由于某种原因没有添加该属性。有什么想法吗?

returnUser = function(userRes) {
  console.log(">POST /returnuser< Returning user w/ userId: " + userRes.userId + " deviceToken: " + userRes.deviceToken);
  return Location.findOne({
    users: {
      $elemMatch: {
        user: userRes.userId
      }
    }
  }, function(error, response) {
    userRes.currentLocation = response;
    console.log(userRes);
    return res.send(userRes);
  });
};

所以在returnuser函数中,我在数据库中搜索用户的当前位置,将其添加到userres对象中,然后返回它。但当我记录userres对象时,它不包含该属性。我的密码有问题吗?userres当前看起来如下:
{ _id: 1,
  createTime: 1428477183281,
  deviceId: '982f24khsd',
  deviceToken: 'kjs398fskjjg5fb43ds323',
  firstName: 'Cat',
  lastName: 'Man',
  email: '[email protected]',
  __v: 0,
  users: [],
  locations: [],
  lngLat: [] }

最佳答案

事实证明,那个userres对象实际上是一个从Mongoose查询返回的Mongoose模型实例,它是不可修改的。
要解决这个问题,您最好调用lean(),它将为您提供一个普通的js对象,而不是一个完整的模型实例。
或者,如果您没有访问该查询的权限,则可以执行以下操作:

mutableUserRes = JSON.parse(JSON.stringify(userRes));

它复制了整个对象,但现在是一个简单的js对象,而不是mongoose模型实例。

10-07 13:11