跳过时间戳中间件在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);