Mongoose仅使用createdAt时间戳

时间:2016-08-11 20:32:57

标签: node.js mongodb mongoose

我在mongoose中有以下消息架构:

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

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

4 个答案:

答案 0 :(得分:20)

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

您可以通过在模式中声明realm.delete(Dog.class)(或任何您想要的名称)来自行处理:

createdAt

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

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

沿着这些方向也是标志isNew,您可以使用它来检查文档是否是新文档。

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

答案 1 :(得分:13)

Mongoose v5甚至更好的是执行以下操作;

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

答案 2 :(得分:1)

较旧的主题,但根据您的架构,可能会有更好的选择... 如果您坚持使用mongodb / mongoose auto-gen _id的默认设置,则已经内置了时间戳。如果只需要“创建”而不是“更新”,则只需使用...

document._id.getTimestamp();

从MongoDB文档中... ObjectId.getTimestamp()

还有这里... stackoverflow

答案 3 :(得分:0)

Mongoose 时间戳接口有这些可选字段。

interface SchemaTimestampsConfig {
    createdAt?: boolean | string;
    updatedAt?: boolean | string;
    currentTime?: () => (Date | number);
  }

我们可以为我们想要的字段传递布尔值(createdAt: trueupdatedAt: true 将添加两个字段)。 我们可以使用 currentTime 函数来覆盖日期格式。

示例:

import mongoose from 'mongoose';

const { Schema } = mongoose;
const annotationType = ['NOTES', 'COMMENTS'];
const referenceType = ['TASKS', 'NOTES'];
const AnnotationSchema = new Schema(
  {
    sellerOrgId: {
      type: String,
      required: true,
    },
    createdById: {
      type: String,
      required: true,
    },
    annotationType: {
      type: String,
      enum: annotationType,
    },
    reference: {
      id: { type: String, index: true },
      type: {
        type: String,
        enum: referenceType,
      },
    },
    data: Schema.Types.Mixed,
  },
  { timestamps: { createdAt: true },
);
const AnnotationModel = mongoose.models.annotation || mongoose.model('annotation', AnnotationSchema);
export { AnnotationModel, AnnotationSchema };