Mongo - 更新文档时使用另一个字段的结果更新一个字段

Posted

技术标签:

【中文标题】Mongo - 更新文档时使用另一个字段的结果更新一个字段【英文标题】:Mongo - update a field with result of another field when a document is updated 【发布时间】:2017-11-10 10:51:20 【问题描述】:

我正在使用 mongoose 来管理我的 mongoDB 集合。 我有一个包含两个数字字段的集合。我想设置另一个字段,每次更新其中一个字段时将这两个字段分开。

让我们坐下,这是我的 mongo 收藏:


  id: 1,
  num1: 100,
  num2: 50,
  result: 2
,

  id: 2,
  num1: 200,
  num2: 10,
  result: 20
,

  id: 1,
  num1: 40,
  num2: 5,
  result: 8

现在,id 为 2 的项目已更新,num1 设置为 50。我想重新计算并使用新的正确值 (10) 设置结果字段。

(对于更新项目,我使用 bulk.find().upsert().updateOne() 函数)。

如何在对性能影响较小的情况下做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用预保存挂钩进行计算:

schema.pre('save', function(next) 
    this.result = this.num1 / this.num2;
    next();
);

...“schema”是您的 Mongoose 架构。

那么当你更新 num1 或 num2 时,会计算并保存结果。

【讨论】:

以上是关于Mongo - 更新文档时使用另一个字段的结果更新一个字段的主要内容,如果未能解决你的问题,请参考以下文章

在mongodb中保存或更新文档时如何防止更新“updatedAt”字段?

Mongo 文档中的更新数组不起作用

Mongo基于一张表的数据更新另一张表

更新/插入子文档时的 mongodb 性能

更新 mongo 文档数组中的单个子文档的计数

在 Mongo 集合中更新数组中的一条记录