【问题标题】:How to populate array of objects in mongoose如何在猫鼬中填充对象数组
【发布时间】:2022-01-11 16:19:03
【问题描述】:

我有这个代码 -

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”、“professor”,但没有任何效果。

我错过了什么?

【问题讨论】:

    标签: mongodb mongoose postman mongoose-populate


    【解决方案1】:

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

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

    【讨论】:

    • 它对我不起作用。我得到的错误是“courses.populate 不是函数”。如果我尝试使用 forEach 方法迭代每门课程,它也不起作用。唯一有效的是如果我输入courses[0].populate('professor'),但由于某种原因我无法循环浏览所有课程。
    • Courses 是一个数组,它上面没有 populate 函数。 courses[0] 是一个 mongodb 游标,它将具有 populate 功能。理想情况下,您可以将 populate 作为聚合阶段的一部分,这样您就可以让 mongo 来做,而不是循环遍历并填充每个查询作为单独查询的一部分。
    【解决方案2】:

    我刚刚通过在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 });
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2021-08-16
      • 2014-11-25
      • 2019-11-27
      • 1970-01-01
      • 2020-10-13
      • 2017-04-29
      • 2020-11-24
      相关资源
      最近更新 更多