programing

MongoDb에서 기본값을 현재 타임스탬프로 사용하여 날짜 필드를 만드는 방법은 무엇입니까?

closeapi 2023. 6. 25. 20:05
반응형

MongoDb에서 기본값을 현재 타임스탬프로 사용하여 날짜 필드를 만드는 방법은 무엇입니까?

기본값으로 날짜 필드를 만드는 방법. 기본값은 컬렉션에서 삽입이 발생할 때마다 현재 타임스탬프여야 합니다.

그것은 꽤 간단합니다!예를 들어 Mongoose를 사용하는 경우 기본값으로 함수를 전달할 수 있습니다.그런 다음 Mongoose는 삽입할 때마다 함수를 호출합니다.

스키마에서 다음과 같은 작업을 수행합니다.

 {
   timestamp: { type: Date, default: Date.now},
   ...
 }

자체만 하세요.Date.now 호출의 이 아닙니다.Date.now()날짜는 스키마를 만들 때의 값으로 한 번만 설정되기 때문입니다.

이 솔루션은 Mongoose & Node에 적용됩니다.Js와 나는 당신이 그것을 더 정확하게 명시하지 않았기 때문에 그것이 당신의 사용 사례이기를 바랍니다.

_id를 사용하여 타임스탬프를 가져옵니다.

이 경우 타임스탬프를 저장하기 위해 명시적인 필드를 만들 필요가 없습니다.개체 ID입니다. "_id"mongo가 기본적으로 생성하는 mongo를 사용하여 목적을 달성할 수 있으므로 추가 중복 공간을 절약할 수 있습니다. 작성 을 얻기 작업을 수행할 수 합니다. node.js와 같은 을 수행할 수 있습니다.

let ObjectId = require('mongodb').ObjectID
let docObjID = new ObjectId(<Your document _id>)
console.log(docObjID.getTimestamp())

그리고 몽구스와 같은 것을 사용하는 경우에는 다음과 같이 하십시오.

let mongoose = require('mongoose')
let docObjID = mongoose.Types.ObjectId(<Your document _id>)
console.log(docObjID.getTimestamp())

"_id"대한 자세한 내용은 여기를 참조하십시오.

문서를 작성할 때 타임스탬프는 생성자에게 전달하거나 직접 설정할 수 있는 몇 가지 구성 가능한 선택사항 중 하나입니다.

const exampleSchema = new Schema({...}, { timestamps: true });

그런 다음 mongoose는 createdAt 및 updatedAt 필드를 스키마에 할당합니다. 할당된 유형은 Date입니다.

삽입하는 동안 간단하게 이 작업을 수행할 수 있습니다.현재로서는timestamp.

collection.insert({ "date": datetime.now() } 

생성된 날짜를 사용하는 사용자 스키마를 고려해 보겠습니다. mongoose 스키마를 사용하고 기본값을 Date.now로 전달할 수 있습니다.

 var UserSchema = new Schema({
       name: {type: String, trim: true},
       created: {type: Date, default: Date.now}
});

만약 우리가 숫자 대신 타임스탬프를 절약하고 싶다면, 그런 숫자 대신 숫자를 사용하세요.

var UserSchema = new Schema({
       name: {type: String, trim: true},
       created: {type: Number, default: Date.now}
});

참고:- 기본 매개 변수에서 Date.now()를 사용할 때 이는 날짜를 한 번만 스키마가 생성된 값으로 설정하므로 다른 문서의 날짜와 동일한 날짜를 찾을 수 있습니다.Date.now() 대신 Date.now를 사용하는 것이 좋습니다.

다음은 기본값을 설정하지 않고 현재 타임스탬프가 있는 개체를 삽입하는 명령입니다.

db.foo.insert({date: new ISODate()});

다음과 같은 효과가 있습니다.

db.foo.insert({date: ISODate()});
db.foo.insert({date: new Date()});

알아두시기 바랍니다.Date()없이.new다를 것입니다 - 그것은 반환하지 않습니다.ISODate개체, 문자열입니다.

또한 시간 설정이 100% 정확하지 않으므로 서버 시간이 아닌 클라이언트 시간을 사용합니다.

타임스탬프를 날짜 형식이 아닌 정수 형식으로 저장하려면 다음 작업을 수행할 수 있습니다.

 {
   timestamp: { type: Number, default: Date.now},
   ...
 }

친구들 고마워요.._id 필드에서 타임스탬프를 가져오는 다른 방법을 찾았습니다.객관적인타임스탬프를 얻습니다. 이것으로부터 우리는 타임스탬프를 얻을 수 있습니다.

이것은 조금 오래되었지만, Date.now() 메서드를 사용할 때 발견됩니다. 현재 날짜와 시간을 얻지 못하고 노드 프로세스 실행을 시작한 시간에 고착됩니다.따라서 모든 타임스탬프는 서버를 시작한 시점의 Date.now()로 기본 설정됩니다.이 문제를 해결하는 한 가지 방법은 다음과 같습니다.

ExampleSchema.pre('save', function (next) {
    const instanceOfSchema = this;
    if(!instanceOfSchema.created_at){
      instanceOfSchema.created_at = Date.now();
    }
    instanceOfSchema.updated_at = Date.now();
    next();
})

생성 위치: {type:날짜, 기본값:Date.now,

언급URL : https://stackoverflow.com/questions/36550263/how-create-a-date-field-with-default-value-as-the-current-timestamp-in-mongodb

반응형