在对象数组上调用.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 } ]

答案 0 :(得分:2)
在您的代码中,您在...
add_subdirectory(foo)
...
# After all add_subdirectory() calls
add_subdirectory(fix_binaries)
模型上调用.findOne
来查询参数中User
的文档。
_id
返回单个mongoose文档(非数组),因此.findOne
回调中的第二个参数应该引用具有该_id的用户,只有一个填充的friends属性。我不太清楚你将如何获得你提供的记录输出。尝试以下几点:
exec