当它应该是_id没有为subdocs生成

这是我的两个模式

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()} }); 

和subcheviews的subcheA

 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到这个代码的结果只会增加我发送的请求不_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没有被添加到subReview中的我的subDocs?

我的猜测是,问题出在你说的父文档:

subReviews:[subReviewSchema]

但是你命名了子模式variables

subReviews

不是subReviewSchema。 但是,这是一个猜测,从你已经发布。 我不得不把代码看在一起才能得到更好的照片,除非是这样。

但是这可以解释它,因为subReviews:只是因为这个命名问题而期望一个对象 – 而且一个对象就是你在POST时得到的东西,所以它只是把它推到数组中。

编辑

我在github上的mongoose代码中search了一下,我对上面的答案不太自信,不过我想这还是可以的。 但是,在声明模式时,我偶然发现了这个评论:

  • 嵌套模式(上children中的子模式)始终在将子模式传递给父模板之前先声明子模式。

我对原始答案的信心不大,因为它看起来像是你错误地命名了variables,mongoose会抛出一个TypeError