跳过时间戳中间件在Mongoose中的某些更新
我的应用程序使用Mongoose,并有一个使用时间戳选项的模式:
var fooSchema = new Schema({ name: String, }, { timestamps: true, }); mongoose.model('Foo', fooSchema);
所以,无论何时将更新写入集合, updatedAt
属性都会更改为当前date。 但是现在我想添加一些不应该更新updatedAt
属性的更改。 一些Stackoverflow( 示例 )的答案build议使用Foo.collection
作为涉嫌访问本地MongoDB驱动程序。 所以我试过这个:
Foo.collection.update({ _id: someFooId }, { $set: { name: 'New Name' } });
但是,那也改变了updatedAt
属性。
那么如何更新文档, 而不更改updatedAt
?
我刚刚find了一个解决scheme,它对我来说是完美的。
mongoose.connection.db.collection('player').update( {_id: mongoose.Types.ObjectId('56cb91bdc5946f14678934ba')}, {$set: {name: 'Test'}} });
此查询不会更新updatedAt
字段。 希望你仍然需要这个!
我能得到的是你正在自动更新updated_at
字段的date时间。 您必须为模式中的updated_at
传递默认值,只需删除该默认字段即可。
例如。
var fooSchema = new Schema({ name: String, }, { updated_at:{ type: Date, default: Date.now } }); mongoose.model('Foo', fooSchema);
从updated_at
删除default field
,你的模式将如下所示。
var fooSchema = new Schema({ name: String, }, { updated_at: Date }); mongoose.model('Foo', fooSchema);