我正在使用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函数不过是对数据库的另一个调用,以提取引用的文档并将其嵌入到主文档中。因此,请尽量避免首先填充它,并且一旦获取它就不要删除它。

10-06 11:53