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

时间:2017-01-20 09:38:31

标签: node.js mongodb mongoose

我处于想要更新mongodb中的集合文档但我不希望更新“updatedAt”字段的情况。我想保留更新字段的先前值。请帮忙。

3 个答案:

答案 0 :(得分:1)

如果您正在使用Waterline或其他数据库抽象,我的建议是在mongo中本地运行查询。

这就是我在Sails.js(运行Waterline)中解决这个问题的方法:



let someQuery = {name: 'John Doe'}; 

MyModel.native(function (err, collection){
  collection.update(
    {query: someQuery},                   // Which documents to update?
    {$set:{field1: "value", foo:"bar"}},  // Our new values
    {multi: true},                        // To support update of multiple fields
    function(err, result){
      if (err) console.log(err)
      else console.log(result.result)
    })
});




答案 1 :(得分:1)

当使用猫鼬的更新查询时,

updatedAt字段将更新。如果我们直接使用$set查询,它将只更新$ set查询中提到的字段。原因为updateAt字段是由mongoose管理的,而不是由mongodb管理的。

答案 2 :(得分:0)

如果您使用的是 mongoose,那么相对较新的功能(2020 年)可让您选择覆盖交易上的设置时间戳(或仅一个)。

Refer to docs

以下文档中的示例

const userSchema = mongoose.Schema({
  email: String
}, { timestamps: true });

const User = mongoose.model('User', userSchema);

const doc = await User.findOneAndUpdate({email: 'test@google.com'}, {email:'newtest@google.com'}, 
{new:true, upsert: true, timestamps:false});