Node js和mongo,pre,post挂钩中间件不在findByIdAndUpdate上执行

时间:2019-12-04 08:38:14

标签: javascript node.js mongodb mongoose keystone

我有一个名为vehicle的架构,可以在其中添加来自管理员的数据,也可以添加导入csv文件的数据。顺便说一下,我正在使用梯形校正js。

现在,当我从管理员添加数据时,钩子被触发并命中,但是当我从导入的csv文件代码中添加数据时,尽管将数据添加到数据库中,钩子也未被命中和触发

我们可以使用Vehicle.model.findOneAndUpdat触发预保存钩子吗?

我的导入csv代码段

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) {



                    }

管理界面

当我从此处添加数据时,钩被击中并触发 my admin -

挂钩

  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()
    }
  })

1 个答案:

答案 0 :(得分:1)

来自官方documentation

  

此功能触发以下中间件。 findOneAndUpdate()

因此,它不会触发pre('save')中间件。相反,您应该使用pre('findOneAndUpdate')中间件。相关官方文档here