Mongoose use only createdAt timestamp

Edit I've amended the answer to reflect the better option to use the default as per @JohnnyHK

You can handle this yourself by declaring the createdAt (or whatever you want to call it) in your schema:

mongoose.Schema({
  created: { type: Date, default: Date.now }
  ...

Alternatively we can also update values on new document in a pre save hook:

messageSchema.pre('save', function (next) {
  if (!this.created) this.created = new Date;
  next();
})

Along those lines is also the flag isNew which you can use to check if a document is new.

messageSchema.pre('save', function (next) {
  if (this.isNew) this.created = new Date;
  next();
})

Older topic but there may be a better option depending on your schema... If you're sticking with the default of having mongodb/mongoose auto-gen _id, there's already a timestamp built in. If all you need is "created" and not "updated" just use...

document._id.getTimestamp();

From MongoDB docs here... ObjectId.getTimestamp()

And Here... stackoverflow


Maybe even better with Mongoose v5 is to do the following;

const schema = new Schema({
  // Your schema...
}, {
  timestamps: { createdAt: true, updatedAt: false }
})