Как обновить встроенный документ внутри встроенного документа в мангусте?

Я создаю API в узле.js, который использует mongodb и mongoose. В настоящее время у меня есть встроенный документ во встроенном документе (схема внутри схемы), который просто не сохраняется в базе данных, и я пробовал все, что мог, но безуспешно.

У меня схема определена в mongoose как:

var BlogPostSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  author: { type: ObjectId, ref: "User" },
  title: { type: String },
  body: { type: String },
  comments: [CommentSchema]
});

var CommentSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  user: { type: ObjectId, ref: "User" },
  body: { type: String, default: "" },
  subComments: [SubCommentSchema]
});

var SubCommentSchema = new Schema({
  creationTime: { type: Date, default: Date.now },
  user: { type: ObjectId, ref: "User" },
  body: { type: String, default: "" }
});

И код, который я выполняю, выглядит следующим образом:

// Create a comment
app.post("/posts/:id/comments", function(req, res, next) {
  Posts.find({ _id : req.params.id }, function(err, item){
    if(err) return next("Error finding blog post.");                
    item[0].comments.push(new Comment(JSON.parse(req.body)));
    item[0].save(); // <= This actually saves and works fine
    respond(req, res, item[0].comments, next);
  });
});

// Create a subcomment
app.post("/posts/:id/comments/:commentid/subcomments", function(req, res, next) {
  Posts.find({ _id : req.params.id }, function(err, item){
    if(err) return next("Error finding blog post.");
    item[0].comments[req.params.commentid - 1].subcomments.push(new SubComment(JSON.parse(req.body)));
    item[0].save(); // <= This completes (without error btw) but does not persist to the database
    respond(req, res, item[0].comments[req.params.commentid - 1].subcomments, next);
  });
});

Я могу без проблем создавать сообщения в блоге с комментариями, но по какой-то причине я не могу создавать подкомментарии к комментарию. Документ записи блога на самом деле имеет комментарии и подкомментарии, прикрепленные при выводе на консоль во время выполнения — только он не сохраняется в базе данных (он сохраняет запись блога с комментарием, но без подкомментариев).

Я попытался отметить "измененный" массив комментариев, но без изменений:

Posts.markModified("comments"); // <= no error, but also no change
...
Posts.comments.markModified("subcomments"); // <= produces an error: "TypeError: Object [object Object] has no method 'markModified'"
5
задан McGarnagle 6 May 2012 в 08:01
поделиться