不能用mongoose在express表示的对象数组上调用map函数

时间:2017-05-10 16:26:23

标签: javascript express mongoose mongoose-schema

在对象数组上调用.map时,它会抛出TypeError错误:friends.map不是函数。

当我使用该对象在vanilla js中执行此操作时,它可以正常工作,但是在我将id和_id值括在引号中之后。

是Mongoose中ObjectId类型的原因吗?如果是这样,我该如何解决?



var UserSchema = new Schema({
  username   : String,
  firstName  : String,
  lastName   : String
	friends    : [{ id: { type: Schema.Types.ObjectId, ref: 'User'}, status: Number }]
});

app.get('/getFriends', requireLogin, function(req, res) {
  User.findOne({ _id: req.user.id }, 'friends')
  .populate({
    path: 'friends.id',
    model: 'User',
    select: 'username firstName lastName -_id'
  })
  .exec(function(err, friends) {
    console.log(typeof(friends))
    console.log(friends)
    friends = friends.map(function(v) {
      delete(v._id);
      delete(v.status);
      return v;
    });
    res.json(friends);
  }) 
})


events.js:163
      throw er; // Unhandled 'error' event
      ^

TypeError: friends.map is not a function






the output of console.log(friends)

[ { _id: 590bbb88858367c9bb07776e,
    status: 2,
    id: 590bba9c858367c9bb077759 },
  { _id: 590bbb95858367c9bb07776f,
    status: 2,
    id: 590bbad5858367c9bb07775f },
  { _id: 590bbb9e858367c9bb077770,
    status: 2,
    id: 590bbb05858367c9bb077765 },
  { _id: 590bbbaa858367c9bb077771,
    status: 2,
    id: 590bbaf2858367c9bb077763 },
  { _id: 590bbbb6858367c9bb077772,
    status: 2,
    id: 590bbae5858367c9bb077761 },
  { _id: 590bbbc5858367c9bb077773,
    status: 2,
    id: 590bbabe858367c9bb07775d },
  { _id: 590bbbef858367c9bb077774,
    status: 2,
    id: 590bbab2858367c9bb07775b } ]




1 个答案:

答案 0 :(得分:2)

在您的代码中,您在... add_subdirectory(foo) ... # After all add_subdirectory() calls add_subdirectory(fix_binaries) 模型上调用.findOne来查询参数中User的文档。

_id返回单个mongoose文档(非数组),因此.findOne回调中的第二个参数应该引用具有该_id的用户,只有一个填充的friends属性。我不太清楚你将如何获得你提供的记录输出。尝试以下几点:

exec