【问题标题】:Mongoose schema saving nested schema as id only, not as objectMongoose 模式将嵌套模式仅保存为 id,而不是对象
【发布时间】:2020-04-22 20:25:32
【问题描述】:

我有 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,SERIALNUMBER: '12455223',标题: '今天的类',classDescription: '降序',curriculumVersion: '2', scheduleDateTime: 'Jan 01 04:00 AM', __v: 3 }

所以它只是保存对象ID,所以我无法访问作者或cmets。有任何想法吗?我看到很多相关的问题,但没有一个有我正在寻找的答案,所以如果这已经存在于某个地方,我提前道歉。

【问题讨论】:

    标签: mongodb mongoose ejs


    【解决方案1】:

    您也可以使用聚合进行填充,如下所示:

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

    【讨论】:

      【解决方案2】:

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

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

      当然,我是在发布问题后立即找到的……

      【讨论】:

        猜你喜欢
        • 2014-03-02
        • 1970-01-01
        • 2016-05-08
        • 2016-03-22
        • 2016-05-06
        • 2019-12-21
        • 2017-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多