在不运行更新查询的情况下识别出修改过的字段

时间:2019-01-10 23:37:59

标签: mongodb mongoose

mongo / mongoose中是否有一个lib或方法可以模拟更新查询的结果,并让我知道最终结果将是什么,以及是否修改了字段/路径,所以

>
const currentModel = new AwesomeLib({
    car: {
        make: 'nissan',
        model: 'leaf',
        colour: 'white',
        tags:[ 'electric' ]
    },
    driver: {
        name: 'mino',
        status: 'happy'
    }
});

currentModel.update({
    car: {
        model: 'altima',
        year: 2018
    },
    $set: {
        driver: {
            status: 'sad'
        },
        'car.tags.1': 'plug in'
    }
});

/*
    this should result in an object that looks like this:
    {
      car: {
        make: 'nissan',
        model: 'altima',
        colour: 'white',
        year: 2018,
        tags:[ 'electric', 'plug in' ]
      },
      driver: {
        status: 'sad'
      }
    }
*/

currentModel.isModified('driver.name');   // true
currentModel.isModified('driver');  // true
currentModel.isModified('car');  // true
currentModel.isModified('car.colour');  // false
currentModel.isModified('car.tags');  // true

1 个答案:

答案 0 :(得分:0)

您可以在猫鼬中使用前置钩子来实现此目的。代码就是这样

 Schema.pre('update', function(done) { //be sure not to use an arrow function.

        this.isModified('password');

      } else {
        return done();
      }
    });