mongoose。人口不起作用

时间:2018-05-10 01:50:08

标签: node.js express mongoose

我正在使用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 }]

0 个答案:

没有答案