我正在使用nodejs / express和mongoose。但是,当尝试在文档上使用.populate(...)
时,它不起作用。这是我的代码:
我有一个用户的这个架构:
const UserSchema = new Schema({
...
friends: [{
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
...
}],
sentRequests: [{
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
...
}],
recievedRequests: [{
user: {
type: Schema.Types.ObjectId,
ref: 'users'
},
...
}]
}
mongoose.model('users', UserSchema);
然后,当我尝试向页面显示所有recievedRequests时,我使用此代码:
router.get('/friendRequests', (req, res) => {
User.findOne({
_id: req.user.id // where req.user is the currently logged in user
})
.populate('recievedRequests.user')
.then(curUser => {
res.render('friends/friendRequests', {
curUser: curUser
});
})
});
其中User
是模型,req.user.id
是当前登录用户的ID。但是,每当我引用curUser.recievedRequests.user
时,在网页中它只返回用户的id而不是实际的用户对象。有谁知道我在这里做错了什么?
感谢。
编辑 - 示例
对于文件:
user1 = {
_id: ObjectId("5ae94b0b2bb9383d4029d64b"),
...
recievedRequests: [
{"_id" : ObjectId("5ae94b5f29c86c4a343d2d0a") }
]
}
和
user2 = {
_id: ObjectId("5ae94b5f29c86c4a343d2d0a"),
...
}
在本文档中使用我的上述代码:
router.get('/friendRequests', (req, res) => {
User.findOne({
_id: user1.id
})
.populate('recievedRequests.user')
.then(curUser => {
res.render('friends/friendRequests', {
curUser: curUser
});
})
});
结果为curUser.recievedRequests = [{ _id : 5ae94b5f29c86c4a343d2d0a }]