0

所以我试图填充已经填充的文档:

postModel
    .findOne({
        _id: postId
    }).select()
    .populate('author')
    .populate('sharedBy')
    .populate('replies')
    .exec(function(err, post) {
        if (err) return err;

但是,该replies数组将包含一堆帖子,其中包含我还需要填充的键authorsharedBy这是我的策略:

    .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罚款,但我似乎无法将它们放回传递的原始帖子中!有任何想法吗?

4

1 回答 1

1

该帖子是Mongoose Document,这意味着您不能像那里那样覆盖属性。快速的解决方案是调用.toObject帖子,然后覆盖回复。

var postObj = post.toObject()
postObj.replies = replies;
cb(err, postObj);

toObject将 Mongoose 文档转换为常规对象,以便您可以覆盖其属性。这里的缺点是,从那时起,你不能在帖子上使用 Mongoose 方法。

我不禁想到有更好的方法来做到这一点。

于 2013-08-22T07:52:45.203 回答