Я использую 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);
Затем, когда я пытаюсь показать все полученные запросы на страницу, я использую этот код:
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
- идентификатор текущего пользователя, вошедшего в систему. Однако на веб-странице, когда я ссылаюсь на curUser.recievedRequests.user
, он просто возвращает идентификатор пользователя, а не фактический объект пользователя. Кто-нибудь знает, что я тут не так делаю?
Спасибо.
РЕДАКТИРОВАТЬ - Пример
Для документа:
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 }]