Javascript 使用猫鼬在两个级别上进行填充

Javascript 使用猫鼬在两个级别上进行填充,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我正在制作一个电影网站来发展我的平均堆栈技能。目前,我正试图从我的数据库中获取一个电影文档。此电影文档有一个属性reviews,它是一个ObjectId数组,引用了Review模型。我填充了这些对象ID,每个审阅文档的结构如下: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var schema = new Schema({ user: {type: Schema.Types.ObjectId, re

我正在制作一个电影网站来发展我的平均堆栈技能。目前,我正试图从我的数据库中获取一个电影文档。此电影文档有一个属性reviews,它是一个ObjectId数组,引用了Review模型。我填充了这些对象ID,每个审阅文档的结构如下:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var schema = new Schema({
    user: {type: Schema.Types.ObjectId, ref:'User'},
    movie: {type: Schema.Types.ObjectId, ref:'Movie'},
    date: {type: Date, default: Date.now},
    content: String
}, { usePushEach: true });

module.exports = mongoose.model('Review', schema);
我已经填充了我从服务器抓取的电影对象的reviews属性,但是我想知道如何也填充我得到的每个review对象的user属性。因此,我不会看到objectId,而是看到实际的用户对象

我在服务器端的路由:我填充了reviews属性,但我不知道如何在这些review对象中填充user属性


我认为您可以通过使用来简化代码

注意,您最多只能执行两个级别。否则,您将需要使用更复杂的.aggregate

router.get('/getmovie/:id', function(req, res, next) {
        var id = req.params.id;

    Movie.findById(id, function(err, movie){
            if (err) {
                res.status(500).json({
                    message: "An error occurred",
                    obj: err
                })
            }
            Review.populate(movie, {path: 'reviews'}, function(err, movie){
                if (err) {
                    res.status(500).json({
                        message: "An error occurred",
                        obj: err
                    })
                }
                res.status(200).json({
                    Message: "success",
                    obj: movie
                });
            })
        })
});
Movie.findById(id).populate({
    path: 'reviews',
    populate: {
        path: 'user'
    }
}).exec(function(err, movie){
    if (err) {
        // make sure you add return or else the code will continue
        return res.status(500).json({
            message: "An error occurred",
            obj: err
        })
    }
    res.status(200).json({
        Message: "success",
        obj: movie
    });
});