所以我正在尝试填充已填充的文档:
postModel
.findOne({
_id: postId
}).select()
.populate('author')
.populate('sharedBy')
.populate('replies')
.exec(function(err, post) {
if (err) return err;
但是,replies
数组会包含大量具有author
和sharedBy
键的帖子,我还需要填充它们。这是我的策略:
.populate('author')
.populate('sharedBy')
.populate('replies')
.exec(function(err, post) {
if (err) return err;
post.deepPopulate(function(err, post){
deepPopulate
:
PostSchema.method('deepPopulate', function(cb) {
var post = this;
async.map(this.replies, function(reply, done) {
mongoose.model('Post', PostSchema).findOne({
_id: reply._id
}).select().populate('author').populate('sharedBy').exec(done);
}, function(err, replies) {
post.replies = replies;
cb(err, post);
});
});
它找到replies
罚款,但我似乎无法将它们放回传入的原始帖子中!有什么想法吗?
答案 0 :(得分:1)
帖子是Mongoose Document,这意味着您无法像在那里一样覆盖属性。快速解决方案是在帖子上调用.toObject
,然后覆盖回复。
var postObj = post.toObject()
postObj.replies = replies;
cb(err, postObj);
toObject
将Mongoose文档转换为常规对象,以便您可以覆盖其属性。这里的负面消息是,从那时起,你就不能在帖子上使用Mongoose方法了。
我不禁想到有更好的方法来做到这一点。