【问题标题】:_id not being generated for subdocs when It's supposed to_id 没有在它应该生成的时候为子文档生成
【发布时间】:2014-03-11 11:45:48
【问题描述】:

这是我的两个模式

var reviews = new Schema({
    scenarioId: { type: Schema.Types.ObjectId, required: true},
    authorId:  { type: Schema.Types.ObjectId , required:true },
    reviewNote:   String,
    subReviews: [subReviewSchema],
    active: {type: Boolean, default: true},
    display:  {type: Boolean, default: true},
    date : {type: Date, default: Date.now()}
});

以及用于子评论的 subscheA

var subReviews = new Schema({
    authorId:  { type: Schema.Types.ObjectId, required:true },
    subReviewNote: String,
    date: {type: Date, default: Date.now()},
    active: {type: Boolean, default: true},
    display:  {type: Boolean, default: true}
});

这是我更新文档的代码

exports.addSubReview = function (req, res) {
    var id = req.params.id;
    var update = req.body;//scenario Id

    Review.findById(id, function (err, obj) {
        if (err || !obj) { return res.send(404, { error: err.message }); }

        obj.subReviews.push(update);

        obj.save(function (err) {
            if (err) { return res.send(404, { error: err.message }); }

            return res.send(200, obj);
        });
    });
};

由于某种原因,尽管每当我向此代码发送 http 帖子时,结果只会添加我在帖子请求中发送的内容,而不是 _id _v 或我希望 mongoose/mongodb 添加为样板的任何其他内容。这是我数据库中的示例文档

{
    "__v": 2,
    "_id": "531e3214a30f5f8427830a97",
    "authorId": "52fd0e6df8352c184b000004",
    "reviewNote": "aaaaaaaaaaaaaaaaa",
    "scenarioId": "531a5b80af15cffc051cea67",
    "date": "2014-03-10T21:37:05.230Z",
    "display": true,
    "active": true,
    "subReviews": [
        {
            "subReviewNote": "This is a subReview",
            "authorId": "52fd0e6df8352c184b000004"
        },
        {
            "subReviewNote": "This is a subReview",
            "authorId": "52fd0e6df8352c184b000004"
        }
    ]
} 

关于为什么 _id 没有被添加到我在 subReviews 中的 subDocs 的任何想法?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我的猜测是问题出在您所说的父文档中:

    子评论:[subReviewSchema]

    但是你命名了子模式变量

    子评论

    不是 subReviewSchema。但这是一个猜测,从你发布的内容来看。除非是这样,否则我必须一起查看代码以获得更好的图片。

    但这可以解释它,因为 subReviews: 只是因为这个命名问题而期待一个对象 - 而一个对象正是你发布时得到的,所以它只是按预期将它推入数组中。

    编辑

    我在 github 上的猫鼬代码中四处寻找,我对上面的答案不太有信心,尽管我想这仍然是可能的。但是,在声明模式时,我确实偶然发现了这条评论:

    • 在嵌套模式时(上例中的children),总是先声明子模式,然后再将其传递给父模式。

    我对我原来的答案不太有信心,因为看起来如果你错误地命名了变量,mongoose 会抛出一个 TypeError

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2018-06-25
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2014-08-09
      • 2017-12-15
      • 2019-03-17
      相关资源
      最近更新 更多