My application uses Mongoose and has a schema that uses the timestamps option:
var fooSchema = new Schema({
name: String,
}, {
timestamps: true,
});
mongoose.model('Foo', fooSchema);
So whenever an update is written to the collection, the updatedAt
property is changed to the current date. But now I would like to add some changes that should not update the updatedAt
property.
Some answers on Stackoverflow (example) suggested to use Foo.collection
as that allegedly accesses the native MongoDB driver. So I tried this:
Foo.collection.update({ _id: someFooId }, { $set: { name: 'New Name' } });
However, that changed the updatedAt
property as well.
So how can I update a document, without changing updatedAt
?
I just found a solution and it works perfectly to me.
mongoose.connection.db.collection('player').update(
{_id: mongoose.Types.ObjectId('56cb91bdc5946f14678934ba')},
{$set: {name: 'Test'}}
});
This query will not update the updatedAt
field. Hope you still need this!
What i can get is you are automatically updating the dateTime of updated_at
field. You must be passing a default value for the updated_at
in your schema, just remove that default field.
For example.
var fooSchema = new Schema({
name: String,
}, {
updated_at:{
type: Date,
default: Date.now
}
});
mongoose.model('Foo', fooSchema);
Remove the default field
from updated_at
and your schema will look like this.
var fooSchema = new Schema({
name: String,
}, {
updated_at: Date
});
mongoose.model('Foo', fooSchema);
来源:https://stackoverflow.com/questions/38621790/skip-timestamps-middleware-for-certain-updates-in-mongoose