好的,这让我疯了。它应该很简单......我希望。我只想在数组中重用模型,比如递归模型定义。
这是我的模特
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var Post = mongoose.model("Post", {
username : String,
message : String,
replies : [{
type : Schema.Types.ObjectId,
ref : 'Post'
}]
});
module.exports.Post = Post;
我创建了帖子。这是我试图添加回复的方式:
module.exports.addReply = function (id, username, message, callback) {
var reply = new Post();
reply.username = username;
reply.message = message;
Post.update(
{ _id: id },
{ $push: { replies : reply }},
{ safe: true, upsert : true},
function (err, result) {
if(err){
callback(createError("Error updating post with reply"));
return;
}
callback(createSuccess(reply));
});
};
但是当我收到帖子(并且它的回复)时,回复数组是空的。这是我的getPost方法......
var getPostById = function (id, callback) {
Post
.findOne({ _id: id })
.populate("replies")
.exec(function (err, post) {
if (err) {
callback(createError("Post '" + id + "' not found.\n" + err));
return;
}
callback(createSuccess(post));
return;
});
};
module.exports.getPostById = getPostById;
我在这里做错了什么?
答案 0 :(得分:1)
我认为您需要在推送之前保存reply
。记住ref只是维护一个对回复的引用(带有id字段,就像在sql中一样)。未保存时,没有对象ID可以推送到回复数组。
var reply = new Post();
reply.username = username;
reply.message = message;
reply.save(function(err, savedReply) {
/// Post.update(...
});