我试图找出对象是否在预保存中更改,并相应地执行一些操作.下面是我的代码

var eql = require("deep-eql");

OrderSchema.post( 'init', function() {
    this._original = this.toObject();
});

OrderSchema.pre('save', function(next) {
    var original = this._original;

    delete this._original;
    if(eql(this, original)){
        //do some actions
    }
    next();
});

即使我不做任何更改,它也会返回false!

推荐答案

首先,你根本不需要original对象.您可以通过thispre挂钩中访问它.其次,post钩子只有在所有pre钩子都执行之后才会执行,所以你的代码根本没有任何意义(check mongoose docs).

你可以通过判断pre挂钩中的isModified来进行判断,然后完全取下post挂钩.

OrderSchema.pre('save', function(next) {    
    if(!this.isModified()){
        //not modified
    }
    next();
});

Update

为了判断是否修改了某些属性,请将属性名称作为参数传递给isModified函数:

if (this.isModified("some-property")) {
  // do something
}

Mongodb相关问答推荐

MongoDB-如何过滤和获取数组字段中的最新数据

根据参考图计算子文档列表的最大值

如何获取键值对的对象,其中值仅具有 mongoDB 中的投影字段

使用 multer 在我的 MERN 前端显示 MongoDB 图像的正确语法是什么?

MongoDB:通过嵌套数组中的最后一个元素值获取文档

Mongo:查找具有 0 个关联文档的文档,成本更低

Mongodb按值分组并计算出现次数

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

在 GridFS、express、mongoDB、node.js 中存储来自 POST 请求的数据流

Mongodb 约定包

MongoDB 存储 ObjectId 的数组

Ruby 按键值分组哈希

如何在 MongoDB Map-reduce 映射函数中使用变量

用于嵌入式集合的 MongoDB 首选模式.文档与数组

使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

从 mongo 结果中删除 _id

Mongoose:Model.create 和 Collection.insert 有什么区别

Mongodb 按字段名称查找任何值

与 mongoose/node.js 共享数据库连接参数的最佳方式

mongoose查询返回 null