gpt4 book ai didi

node.js - 应该为子文档生成 _id 时却没有生成

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:54 26 4
gpt4 key购买 nike

这是我的两个架构

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 post 时,结果只会添加我在 post 请求中发送的内容,而不是 _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 中,有什么想法吗?

最佳答案

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

subReviews: [subReviewSchema]

但是您命名了子架构变量

subReviews

不是 subReviewSchema。但这是根据您发布的内容进行的猜测。我必须一起查看代码才能获得更好的了解,除非就是这样。

但这可以解释它,因为 subReviews: 由于这个命名问题而只是期望一个对象 - 并且一个对象正是您 POST 时它得到的,所以它只是按预期将其插入数组。

编辑

我在 github 上浏览了 mongoose 代码,我对上面的答案不太有信心,尽管我猜这仍然是可能的。然而,在声明模式时,我确实偶然发现了这个评论:

  • When nesting schemas, (children in the example above), always declare the child schema first before passing it into is parent.

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

关于node.js - 应该为子文档生成 _id 时却没有生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com