我有一个带引用的简单模式。但我不想在每个查询上填充引用的文档。相反,我想在引用文档上缓存一个部分(只有一个属性)。
一个简单的示例模式:
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();
};
这不是最好的解决方案。所以我的问题是:这个案例的最佳做法是什么?