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 的更有效方式