如何在猫鼬中填充对象数组

How to populate array of objects in mongoose

我有这个代码 -

const getAllCourses = async (req, res) => {
    const courses = await Course.find({});

    try {
        await courses.populate('professor')
        
        res.send({ status: 200, data: { courses } });
    } catch (err) {
        res.status(500).send({ status: 500, message: "Internal server error." });
    }

};

此外,这是我从邮递员那里得到的回复 -

{
    "status": 200,
    "data": {
        "courses": [
            {
                "_id": "61dc47f58f88c1a7e9bd36b6",
                "name": "Course1",
                "professor": "61dc1299431cd669faad7d0f",
                "students": [
                    {
                        "student": "61dc0b7f103b531f105e8e4c",
                        "_id": "61dc47f58f88c1a7e9bd36b7"
                    },
                    {
                        "student": "61dc220885886a9f1d8e94d0",
                        "_id": "61dc47f58f88c1a7e9bd36b8"
                    }
                ],
                "createdAt": "2022-01-10T14:51:33.313Z",
                "updatedAt": "2022-01-10T14:51:33.313Z",
                "__v": 0
            },
            {
                "_id": "61dc47fb8f88c1a7e9bd36bf",
                "name": "Course2",
                "professor": "61dc1299431cd669faad7d0f",
                "students": [
                    {
                        "student": "61dc0b7f103b531f105e8e4c",
                        "_id": "61dc47fb8f88c1a7e9bd36c0"
                    },
                    {
                        "student": "61dc220885886a9f1d8e94d0",
                        "_id": "61dc47fb8f88c1a7e9bd36c1"
                    }
                ],
                "createdAt": "2022-01-10T14:51:39.704Z",
                "updatedAt": "2022-01-10T14:51:39.704Z",
                "__v": 0
            }
        ]
    }
}

现在我想做的是填充教授和学生,但它似乎不起作用。

我尝试填充“courses.professor”、“course.professor”、“教授”,但没有任何效果。

我错过了什么?

Here 是一个示例,说明如何对包含数组 friends 的文档执行此操作:

User.
  findOne({ name: 'Val' }).
  populate({
    path: 'friends',
    // Get friends of friends - populate the 'friends' array for every friend
    populate: { path: 'friends' }
  });

我只是通过在 Course.find({}) 之后直接链接 populate 方法解决了这个问题,它确实起作用了,但我不确定为什么。

解决方案:

const getAllCourses = async (req, res) => {
    const courses = await Course.find({}).populate('professor').populate('students.student');

    try {
        res.send({ status: 200, data: { courses } });        
    } catch (err) {
        res.status(500).send({ status: 500, message: err.message });
    }
};