업데이트 : (5 년 후)
참고 : Kappa Architecture ( Event Sourcing + CQRS ) 를 사용하기로 결정한 경우 업데이트 날짜가 전혀 필요하지 않습니다. 데이터는 변경 불가능한 추가 전용 이벤트 로그이므로 이벤트 작성 날짜 만 있으면됩니다. 아래 설명 된 Lambda 아키텍처 와 유사 합니다. 그런 다음 응용 프로그램 상태는 이벤트 로그 (파생 데이터)의 투영입니다. 기존 엔티티에 대한 후속 이벤트를 수신하면 해당 이벤트의 작성 날짜를 엔티티의 업데이트 날짜로 사용합니다. 이것은 mouseroservice 시스템에서 일반적으로 사용되는 (그리고 일반적으로 오해 된) 연습입니다.
업데이트 : (4 년 후)
필드 ObjectId
로 사용 _id
하는 경우 (보통 경우) 다음과 같이하면됩니다.
let document = {
updatedAt: new Date(),
}
_id
필드 에서 생성 된 타임 스탬프를 얻는 방법에 대해서는 아래의 원래 답변을 확인하십시오 . 외부 시스템의 ID를 사용해야하는 경우 Roman Rhrn Nesterov의 답변을 확인하십시오.
업데이트 : (2.5 년 후)
몽구스 버전이 4.0 이상인 #timestamps 옵션을 사용할 수 있습니다 .
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
타임 스탬프, 몽구스 할당 createdAt
및 updatedAt
필드를 스키마에 설정하면 할당 된 유형은 Date
입니다.
타임 스탬프 파일 이름을 지정할 수도 있습니다.
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
참고 : 중요한 데이터가있는 큰 응용 프로그램을 작업하는 경우 문서 업데이트를 다시 고려해야합니다. 불변의 추가 전용 데이터 ( 람다 아키텍처 )로 작업하는 것이 좋습니다. 이것이 의미하는 것은 삽입물 만 허용한다는 것입니다. 업데이트 및 삭제는 허용되지 않아야합니다! 레코드를 "삭제"하려면 일부 timestamp
/ version
파일이 포함 된 새 버전의 문서를 쉽게 삽입 한 다음 deleted
필드를 로 설정하면 됩니다 true
. 마찬가지로 문서를 업데이트하려는 경우 적절한 필드가 업데이트되고 나머지 필드가 복사 된 새 문서를 만든 다음이 문서를 쿼리하려면 최신 타임 스탬프가있는 문서 또는 최신 버전의 문서를 가져옵니다. "삭제되지 않음"(deleted
필드가 정의되지 않았거나 false입니다.).
데이터 불변성으로 데이터를 디버깅 할 수 있습니다. 모든 문서의 기록을 추적 할 수 있습니다. 문제가 발생하면 이전 버전의 문서로 롤백 할 수도 있습니다. 이러한 아키텍처 ObjectId.getTimestamp()
를 사용하면 필요한 모든 것이 있으며 몽구스에 의존하지 않습니다.
원래 답변 :
ID 필드로 ObjectId를 사용하는 경우 필드가 필요하지 않습니다 created_at
. ObjectId에는라는 메소드가 getTimestamp()
있습니다.
ObjectId ( "507c7f79bcf86cd7994f6c0e"). getTimestamp ()
다음과 같은 출력이 반환됩니다.
ISODate ( "2012-10-15T21 : 26 : 17Z")
자세한 정보는 여기 에서 Mongo ObjectID에서 생성 된 날짜를 추출하는 방법
파일을 추가 updated_at
하려면 다음을 사용해야합니다.
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});