Mongoose仅使用createdAt时间戳

Jua*_*tes 11 mongoose mongodb node.js

我在mongoose中有以下消息模式:

var messageSchema = mongoose.Schema({
  userID: { type: ObjectId, required: true, ref: 'User' },
  text:   { type: String, required: true }
},
{
  timestamps: true
});
Run Code Online (Sandbox Code Playgroud)

无论如何都要忽略updatedAt时间戳?消息不会更新,因此updatedAt将浪费空间

rob*_*ten 22

也许用Mongoose v5更好的是做以下事情;

const schema = new Schema({
  // Your schema...
}, {
  timestamps: { createdAt: true, updatedAt: false }
})
Run Code Online (Sandbox Code Playgroud)


cyb*_*bat 21

编辑我修改了答案,以反映使用@JohnnyHK默认值的更好选项

您可以通过createdAt在模式中声明(或任何您想要调用它)来自行处理:

mongoose.Schema({
  created: { type: Date, default: Date.now }
  ...
Run Code Online (Sandbox Code Playgroud)

或者,我们也可以在预保存挂钩中更新新文档的值:

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

沿着这些线也是标志isNew,您可以使用它来检查文档是否是新的.

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

  • 如果定义默认值,则可以跳过中间件:`created:{type:Date,default:Date.now}` (2认同)