【问题标题】:Mongoose update $setOnInsert changes updatedAt timestamp even when no update occursMongoose update $setOnInsert 更改 updatedAt 时间戳,即使没有发生更新
【发布时间】:2018-03-04 00:39:09
【问题描述】:

我有一个带有timestamps: true 参数的架构。我想插入文档,但前提是它们尚不存在。如果它们确实存在,则不应发生任何操作(noop)。

所以我使用 $setOnInsert 参数如下

return Order.findByIdAndUpdate(
        order._id,
        {
          $setOnInsert: order
        },
        {
          upsert: true,
          new: true
        });

如果我理解正确,这应该只在文档不存在时插入文档,否则不执行更新。

但发生的情况是,每当我运行此操作时,updatedAt 时间戳都会更新。

如何防止这种情况发生?这是预期的行为还是我选择了错误的方法来“仅在不存在时插入”?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    findOneAndUpdate 接受 timestamps 选项,该选项(当设置为 false 时)允许您跳过更新时间戳。

    例如:

    return Order.findByIdAndUpdate(
      order._id,
      {
        $setOnInsert: order
      },
      {
        timestamps: false,
        upsert: true,
        new: true
      }
    );
    

    可以查看相关文档here

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2017-01-22
      • 1970-01-01
      • 2012-08-14
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多