我如何在带有预钩子的.save函数后填充文档

时间:2019-04-21 13:18:42

标签: node.js mongoose mongoose-schema mongoose-populate

我有预钩来填充设置为schema.pre(/^find/, fn)的必填字段。现在,我正在尝试使用相同类型的系统来使用document.save()函数,但遗憾的是,它既不适用于schema.pre('save')也不适用于schema.post('save')

因此,这将完全填充字段:

let user = await User.findOneAndUpdate({_id: user._id}, {$set: {testFieldWithRef: someObjectId}}, {new: true});
console.log(user.testFieldWithRef) //would output populated field instead of objectId

不会用我的.pre钩子填充字段

let user = await User.findOne({_id: user._id})
user.testFieldWithRef = someObjectId
user.markModified('testFieldWithRef')
user = await user.save()
console.log(user.testFieldWithRef) //would output someObjectId

1 个答案:

答案 0 :(得分:0)

所以,这奏效了。不幸的是,猫鼬在stackoverflow上并不流行

schema.pre('save', async function(next) {
    await this.populate({
        path: 'testFieldWithRef'
    }).execPopulate();
    next()
})