我有一个名为vehicle的架构,可以在其中添加来自管理员的数据,也可以添加导入csv文件的数据。顺便说一下,我正在使用梯形校正js。
现在,当我从管理员添加数据时,钩子被触发并命中,但是当我从导入的csv文件代码中添加数据时,尽管将数据添加到数据库中,钩子也未被命中和触发
我们可以使用Vehicle.model.findOneAndUpdat触发预保存钩子吗?
exports.import = function (req, res) {
let file = fs.createReadStream(req.files.file.path)
Papa.parse(file, {
header: true,
worker: true,
preview: prev_val,
complete: function (results) {
let vehicles = _.each(results.data, function (value, key) {
let condition = { VIN: value.VIN }
Vehicle.model.findOneAndUpdate(condition, value, { upsert: true, new: true }, function (err, doc) {
}
schema.pre('save', function (next) {
console.log("HIT" , hit)
if (this.isNew) {
next()
} else {
console.log("this._original" , this._original)
console.log("this._original1" , this)
this._diff = getDiff(this, this._original)
next()
}
})
答案 0 :(得分:1)
来自官方documentation:
此功能触发以下中间件。
findOneAndUpdate()
因此,它不会触发pre('save')
中间件。相反,您应该使用pre('findOneAndUpdate')
中间件。相关官方文档here。