2012-05-01 24 views
5

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'" 
+0

¿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

Respuesta

6

Problema solucionado. Se me dio la respuesta por Aaron Heckmann sobre el mongoose Google Group:

declarar siempre a su hijo esquemas antes de pasarlos a los padres le esquemas de lo contrario está de paso definido.

SubCommentSchema debería ser primero, luego Comentario seguido por BlogPost.

Después de invertir los esquemas funcionó.

0

I cosa que la actualización de un documento no es un tema importante como los documentos incorporados también son plenamente capaces de cualquier servicio .

+1

Hmm, algo críptico. ¿Puedes elaborar un poco sobre lo que estás tratando de decir? – Rory

Cuestiones relacionadas