Mongoose缓存创建时引用的子代码的一部分

时间:2015-07-14 11:42:34

标签: mongodb mongoose

我有一个带引用的简单模式。但我不想在每个查询上填充引用的文档。相反,我想在引用文档上缓存一个部分(只有一个属性)。

一个简单的示例模式:

User
  - displayName
  (....stuff....)

Posts
  - title
  - content
  - user (reference?)

当我按需使用引用和人口时,我的PostSchema看起来像:

var PostSchema = new Schema({
    ...
    user: {
            type: Schema.ObjectId,
            ref: 'User'
        }
})

但我想保存(缓存)仅显示displayName (不是User中的其他内容)和post 中的_id创建时。我的理由是将PostSchema改为:

user: {
    _id: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    displayName: String
}

关于创建帖子我做了:

var post = new Post(req.body);
post.user._id = req.user._id;
post.user.displayName = req.user.displayName;

这个问题是:看起来现在_id 引用的用户,导致荒谬的user._id._id。此外,我的isCreator-middleware现在需要将_id转换为字符串:

exports.isCreator = function(req, res, next) {
    if (req.post.user._id.toString() !== req.user._id.toString()) {
        return res.status(403).send('User is not authorized');
    }
    next();
};

这不是最好的解决方案。所以我的问题是:这个案例的最佳做法是什么?

0 个答案:

没有答案