bestsource

Mongoose 사용만 생성됨타임스탬프

bestsource 2023. 7. 13. 20:58
반응형

Mongoose 사용만 생성됨타임스탬프

mongoose에 다음 메시지 스키마가 있습니다.

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

업데이트된 At 타임스탬프를 무시할 방법이 있습니까?메시지가 업데이트되지 않아 업데이트At가 공간을 낭비합니다.

Mongoose v5는 다음을 수행하는 것이 더 나을 수 있습니다.

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

편집 @Johnny에 따라 기본값을 사용하는 더 나은 옵션을 반영하도록 답변을 수정했습니다.홍콩

다음을 선언하여 직접 처리할 수 있습니다.createdAt스키마에서 (또는 원하는 이름으로):

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

또는 사전 저장 후크에서 새 문서의 값을 업데이트할 수도 있습니다.

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

이 행을 따라 문서가 새 것인지 확인하는 데 사용할 수 있는 새로 만들기 플래그도 있습니다.

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

이전 항목이지만 스키마에 따라 더 나은 옵션이 있을 수 있습니다.mongodb/mongoose auto-gen_id 기본값을 고수하는 경우 이미 타임스탬프가 내장되어 있습니다."업데이트"가 아닌 "작성"만 하면 되는 경우에는...

문서._id.타임스탬프 가져오기();

여기 MongoDB 문서에서...ObjectId.get 타임스탬프()

그리고 여기...스택 오버플로

Mongoose 타임스탬프 인터페이스에는 다음과 같은 선택적 필드가 있습니다.

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

원하는 필드에 대한 부울 값을 전달할 수 있습니다(createdAt: true그리고.updatedAt: true두 필드를 모두 추가합니다.현재 시간 함수를 사용하여 날짜 형식을 덮어쓸 수 있습니다.

예:

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 };

언급URL : https://stackoverflow.com/questions/38905633/mongoose-use-only-createdat-timestamp

반응형