我有以下mongoose架构
var postTable = mongoose.Schema({
userPost:{type : String},
dateCreated: {type: Date, default: Date.now},
_replies:[{type: mongoose.Schema.Types.ObjectId, ref: 'reply_table'}],
_creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});
和
var reply_table = mongoose.Schema({
userReply:{type:String},
date_created:{type:Date, default: Date.now},
_post:{type: mongoose.Schema.Types.ObjectId, ref: 'post'},
_creator:{type: mongoose.Schema.Types.ObjectId, ref: 'User'}
});
var userPost = module.exports = mongoose.model("Post",postTable);
var userReply = module.exports = mongoose.model('reply_table',reply_table);
用户可以创建将在Post表中输入的帖子,其他用户可以评论或回复将被输入到reply_table的帖子。 然后我尝试像这样填充post表格
module.exports.getPost = function (callback) {
var mysort = { dateCreated: -1 };
userPost
.find({},callback)
.sort(mysort)
.populate('_creator','username')
.populate(' _replies')
.exec(function (err,post) {
if(err) throw err;
console.log(post)
});
};
当控制台打印出帖子时,它会打印帖子信息和带有用户信息的对象,因为我为用户设置了另一个架构,因此我使用了.populate('_creator','username')
问题是它不打印回复信息它只打印一个空数组:回复[]。
我很确定我做的一切都是正确的。我使用以下代码将信息插入到reply_table
中//make a reply on a post
module.exports.make_reply = function (user_id,pid,reply,callback) {
var newReply = userReply({
_creator: user_id,
_post: pid,
userReply: reply
});
newReply.save(callback);
}
我知道这个问题很长,但是有人知道我可能做错了什么。我只想使用来自reply_table
的信息填充Post模式答案 0 :(得分:0)
我终于想出了我的问题的解决方案。我做的是我创建了一个函数来将回复id插入post表。它基本上通过其id获取注释,并将回复推送到post表中的_replies数组。
//Insert reply into post table
module.exports.addReply = function (id,reply) {
userPost.update({_id:id},{$push:{replies:reply}},{multi:true},function
(err,post) {
});
}
当我使用getPost函数时,它会填充回复表
module.exports.getPost = function (callback) {
var mysort = {dateCreated: -1};
userPost
.find({}, callback)
.sort(mysort)
.populate('_creator', 'username')
.populate('replies')
.exec(function (err) {
if(err) throw err;
});
};