猫鼬模式仅将嵌套模式保存为ID,而不是对象

时间:2020-01-04 16:34:04

标签: mongodb mongoose ejs

我有2种猫鼬模式:第一个是“反馈”:

var feedbackSchema = new mongoose.Schema({
    author: String,
    student: String,
    gender: String,
    content: String
});

是第二个“ aClass”的成员:

var aClassSchema = new mongoose.Schema({
    serialNumber: String,
    title: String,
    classDescription: String,
    curriculumVersion: String,
    scheduledDateTime: String,
    feedbacks: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Feedback"
        }
    ]
});

在一个ejs文件中,我试图像这样访问反馈的作者:


    <div style="width: 700px; margin: 50px auto; background-color:lightgrey; border: 3px solid black">
        <% aClass.feedbacks.forEach(function(feedback){ %>
        <p style="margin: 10px"><strong><%= feedback.author %> - <%= feedback.content %></strong></p>     
        <% }); %>
        <p>
   </div

但是我不能,因为在检查“ aClass”对象时,我得到以下信息:

{反馈: [5e109f3fd1a6540cd8286628,5e10b1f64c82be15a9d9bda1,5e10b23f38800515b7415b4a] ,_ id:5e109f3fd1a6540cd8286626,序列号:'12455223',标题:' ScheduleDateTime:“ 1月1日04:00 AM”,__ v:3}

因此,它仅保存对象ID,因此我无法访问作者或注释。有任何想法吗?我看到了许多相关问题,但没有一个能找到我要的答案,因此,如果这个问题已经存在,我会提前道歉。

2 个答案:

答案 0 :(得分:1)

您也可以像这样填充聚合:

db.aclassModel.aggregate([ { $lookup: { from: "*youfeedbackcollection*", foreignField: "_id", localField: "feedbacks", as: "fee" } } ]

答案 1 :(得分:0)

好,所以我才意识到我必须使用“填充”,如下所示:

AClass.findById(req.params.id).populate("feedbacks"), function(err, aClass){}...

当然,我在发布问题后就发现了它。