Mongoose 更新结果确切地显示了哪些字段被修改

Posted

技术标签:

【中文标题】Mongoose 更新结果确切地显示了哪些字段被修改【英文标题】:Mongoose update results with exactly which fields got modified 【发布时间】:2016-11-26 08:18:33 【问题描述】: 我有多个使用 mongodb 用 node.js 编写的更新 REST API 作为后端数据库。 这些更新 API 在本质上是原子的,并且在 为用户配置文件的时间更新 mongodb 文档的各个部分示例:位置 API、个人信息 API 等。

我正在寻找一种能够知道在文档中修改了哪些单个字段的功能。例如,如果位置 API 包含国家、州、城市以及是否真的对国家进行了更新。我想跟踪国家作为唯一的字段变化。

Mongoose 不会报告文档中真正需要修改的字段。

下面是示例:

Model.users.update(_id: "12345", $set: update, upsert:true, function (err, resp) 
        if (err)  return console.log(err);
 ----
);

回复:

 ok: 1,
  nModified: 1,
  n: 1,
  lastOp: Timestamp  _bsontype: 'Timestamp', low_: 1, high_: 1469188533 ,
  electionId: 5765d40f7dd9376cd6345122 

【问题讨论】:

使用findOneAndUpdate() API 不起作用。你有什么例子吗? 【参考方案1】:

为此使用猫鼬中间件

http://mongoosejs.com/docs/middleware.html

schema.post('update', function(doc, next) 

        // this._update.$set  contains all the fields which are updated 
        if (this._update.$set.country) 
          concole.log('country is modified');
        




    );

【讨论】:

我如何在这里通过我的条件? 好的,现在我明白这有点像对象上的触发器。此代码将监听更改。但我想知道这个值是否真的更新了。 if (this._update.$set.country) 检查值是否被修改 @AzeemMalik 这不准确。传递给 update 的 $set 操作的任何字段都将在此处列出,无论它们与旧值不同还是相同。

以上是关于Mongoose 更新结果确切地显示了哪些字段被修改的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义

mongoose 中的 _doc 是啥(console.log 显示有和没有相同的结果)

更新子文档、NodeJS 和 Mongoose 的更有效方式

更新子文档、NodeJS 和 Mongoose 的更有效方式

无法使用请求解析网页的确切结果

Mongoose:$lookup 后的 $project 不显示字段