我处于想要更新mongodb中的集合文档但我不希望更新“updatedAt”字段的情况。我想保留更新字段的先前值。请帮忙。
答案 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 年)可让您选择覆盖交易上的设置时间戳(或仅一个)。
以下文档中的示例
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});