猫鼬upsert *** 作是否会更新更新默认架构值?

猫鼬upsert *** 作是否会更新更新默认架构值?,第1张

猫鼬upsert *** 作是否会更新/更新默认架构值?

如果您正在寻找预期行为的“证明”,那么除了源代码本身之外,别无所求。特别是在

schema.js
主要定义内:

        updates.$setonInsert = {};        updates.$setOnInsert[createdAt] = now;      }      return updates;    };    this.methods.initializeTimestamps = function() {      if (createdAt && !this.get(createdAt)) {        this.set(createdAt, new Date());      }      if (updatedAt && !this.get(updatedAt)) {        this.set(updatedAt, new Date());      }      return this;    };    this.pre('findOneAndUpdate', _setTimestampsOnUpdate);    this.pre('update', _setTimestampsOnUpdate);    this.pre('updateOne', _setTimestampsOnUpdate);    this.pre('updateMany', _setTimestampsOnUpdate);  }  function _setTimestampsonUpdate(next) {    var overwrite = this.options.overwrite;    this.update({}, genUpdates(this.getUpdate(), overwrite), {      overwrite: overwrite    });    applyTimestampsToChildren(this);    next();  }

因此,您可以看到所有的

'pre'
中间件处理程序都已为每个“
update”方法变体注册并注册到相同的功能代码。所有这些本质上都会
$set
在您发出的任何“更新”中修改运算符,以包括该
updatedAt
字段,或您在模式选项中映射到该键的任何名称。

通过“
upsert” *** 作发送的实际语句

$setOnInsert
用于
createdAt
字段或映射的选项名称(请参见清单顶部)。此 *** 作
在“ upsert”实际发生 时才 适用,因此该值实际上 不会 触及存在且仅与任何“ update”方法匹配的文档。

这些运算符是MongoDB工作方式的一部分,与Mongoose无关,但此处显示的代码显示了Mongoose如何“调整”您的“
update” *** 作以包括这些附加 *** 作。

作为参考,整个主要功能(

schema.js
目前在其中列出了该功能的适用范围)始于第798行,该
genUpdates()
功能在此处显示的列表的底部部分中被调用,但顶部是该功能的最后几行,其中的
$setOnInsert
get
键定义。

因此,在总结,是每一个“更新”的动作是故意的

updatedAt
映射领域已经电流
Date
值分配,并且也认为,“更新”被修改为包括
$setOnInsert
其行动
只有 当一个新的文档作为的结果创建适用“ upsert” *** 作
createdAt



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5477005.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存