2012-05-01 37 views
5

Tôi đang xây dựng một API trong node.js sử dụng mongodb và mongoose. Hiện tại tôi có một tài liệu nhúng bên trong một tài liệu nhúng (Schema trong một Schema) mà chỉ đơn giản là không tồn tại trong cơ sở dữ liệu, và tôi đã thử tất cả những gì tôi có thể nhưng không may mắn.Làm cách nào để cập nhật tài liệu được nhúng trong tài liệu được nhúng trong mongoose?

Tôi có của Schema định nghĩa trong mongoose như:

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: "" } 
}); 

Và đoạn code tôi thực hiện như sau:

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

tôi có thể tạo Blog bài viết với ý kiến ​​mà không vấn đề, nhưng vì một lý do Tôi không thể tạo subcomments trên một bình luận. Các tài liệu Blog Post thực sự có các bình luận và subcomments kèm theo khi in đến bàn điều khiển trong khi thực hiện - chỉ nó không lưu vào cơ sở dữ liệu (nó lưu Blog Post với một bình luận, nhưng không có subcomments).

tôi đã cố gắng "markModified" trên mảng ý kiến, nhưng không có sự thay đổi:

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

Tôi đang nghĩ rằng tôi có thể phải bỏ đối tượng từ MongoDB bằng cách nào đó? Vì nó có thể không nhận ra nhận xét và phụ đề như tài liệu mongoose? – Rory

Trả lời

6

Sự cố khi được giải quyết. Tôi đã đưa ra câu trả lời bởi Aaron Heckmann qua số mongoose Google Group:

Luôn khai báo các lược đồ con của bạn trước khi chuyển chúng cho bạn, nếu không bạn sẽ không được xác định.

Chế ý phụSchuẩn phải là trước tiên, sau đó là Nhận xét theo sau là BlogPost.

Sau khi đảo ngược các lược đồ hoạt động.

0

tôi điều các cập nhật của một tài liệu không phải là một vấn đề quan trọng như các văn bản nhúng cũng có đủ năng lực của bất kỳ dịch vụ .

+1

Hmm, hơi khó hiểu. Bạn có thể xây dựng một chút về những gì bạn đang cố gắng nói không? – Rory

Các vấn đề liên quan