Estoy construyendo una API en node.js que usa mongodb y mangosta. Actualmente tengo un documento incrustado dentro de un documento incrustado (Esquema dentro de un Esquema) que simplemente no se conserva en la base de datos, y he intentado todo lo que puedo pero no tuve suerte.¿Cómo actualizar un documento incrustado dentro de un documento incrustado en mangosta?
tengo del esquema definido en la mangosta como:
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: "" }
});
Y el código que se ejecutará será de la siguiente manera:
// 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);
});
});
puedo crear las publicaciones de blog con comentarios sin problema, pero por alguna razón No puedo crear subcomentarios en un comentario. El documento del blog en realidad tiene los comentarios y subcomentarios adjuntos al imprimir en la consola durante la ejecución, solo que no se guarda en la base de datos (guarda el blog con un comentario, pero no con subcomentarios).
he tratado de "markModified" en la matriz de los comentarios, pero ningún cambio:
Posts.markModified("comments"); // <= no error, but also no change
...
Posts.comments.markModified("subcomments"); // <= produces an error: "TypeError: Object [object Object] has no method 'markModified'"
¿Estoy pensando que quizás tenga que lanzar el objeto de MongoDB de alguna manera? ¿Tal vez no reconozca el comentario y el subcomentario como documentos de mangosta? – Rory