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
'programing' 카테고리의 다른 글
에서 Oracle 데이터베이스 연결 방법.넷코어 (0) | 2023.06.25 |
---|---|
여러 CTE와 연합하려면 어떻게 해야 합니까? (0) | 2023.06.25 |
다른 테이블 SUM의 환율로 가격을 변환하고 AVG를 얻습니다. (0) | 2023.06.25 |
파이어베이스에서 역할 기반 액세스 제어를 구현하려면 어떻게 해야 합니까? (0) | 2023.06.25 |
vuex를 사용하는 다른 구성 요소에서 v-model의 값 변경 (0) | 2023.06.25 |