我正在使用autopopulate,但是在某些情况下,我不想填充。我如何取消人烟?
var userSchema = new Schema({
local: { type: ObjectId, ref: 'Local', autopopulate: true },
facebook: { type: ObjectId, ref: 'Facebook', autopopulate: true },
twitter: { type: ObjectId, ref: 'Twitter', autopopulate: true },
google: { type: ObjectId, ref: 'Google', autopopulate: true }
});
User
.findById(req.params.id)
.unpopulate(local)
.exec()...
最佳答案
据我了解,mongoose-autopopulate在执行前使用mongoose middleware前置钩在find和findOne查询上配置填充选项。这就像在查询中隐式附加populate选项。
对于您的模式,使用mongoose-autopopulate User.findById(req.params.id)
将转换为
User.findById(req.params.id).populate('local')
.populate('facebook').populate('twitter').populate('google');
在mongoose-autopopulate中无法删除它,除非并且除非您在查询之前显式禁用了必填字段的autopopulate选项。
populate函数不过是对数据库的另一个调用,以提取引用的文档并将其嵌入到主文档中。因此,请尽量避免首先填充它,并且一旦获取它就不要删除它。