mongoose를 사용하여 mongodb에서 컬렉션의 만료 시간 설정
다음은 mongo 터미널을 통해 수집(TTL)의 만료 시간을 설정하는 데 사용할 수 있는 명령입니다.
db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )
mongoose를 사용하여 Node.js의 코드에서 이를 수행하는 방법은 무엇입니까?
Mongoose에서 TTL 인덱스를 만듭니다.Date
해당 필드의 스키마 정의에 있는 속성을 통해 필드:
// expire docs 3600 seconds after createdAt
new Schema({ createdAt: { type: Date, expires: 3600 }});
참고:
- MongoDB의 데이터 만료 태스크는 1분에 한 번 실행되므로 만료된 문서는 만료 후 1분까지 유지될 수 있습니다.
- 이 기능을 사용하려면 MongoDB 2.2 이상이 필요합니다.
- 설정은 당신에게 달려 있습니다.
createdAt
문서를 만들 때 현재 시간으로, 또는 추가할 때default
여기서 제안하는 것처럼 당신을 위해 그것을 합니다.{ createdAt: { type: Date, expires: 3600, default: Date.now }}
이 코드는 나에게 효과가 있습니다.
도움이 되시길
let currentSchema = mongoose.Schema({
id: String,
name: String,
packageId: Number,
age: Number
}, {timestamps: true});
currentSchema.index({createdAt: 1},{expireAfterSeconds: 3600});
문자열 제공expires
또한 만료 시간 계산을 처리하고 스키마의 전반적인 가독성을 향상시키지 않으려는 경우 Mongoose와 잘 작동합니다.
예를 들어 여기서는 다음과 같이 설정합니다.expires
2m(2분)에 몽구스는 120초로 변환됩니다.
var TestSchema = new mongoose.Schema({
name: String,
createdAt: { type: Date, expires: '2m', default: Date.now }
});
Mongoose는 백그라운드에서 인덱스를 만들고 자동 설정합니다.expireAfterSeconds
이 경우에는120
seconds(2m로 지정).
TTL 프로세스는 60초에 한 번 실행되므로 항상 완벽하게 제 시간에 실행되지는 않습니다.
Mongodb Atlas Replica Sets로 작업하는 경우 - 다음을 시도합니다.
import * as mongoose from 'mongoose';
let currentSchema = new mongoose.Schema({
createdAt: { type: Date, expires: 10000, default: Date.now },
id: String,
name: String,
packageId: Number,
age: Number
});
currentSchema.index({"lastModifiedDate": 1 },{ expireAfterSeconds: 10000 });
new Scehma({
expireAt: {
type: Date,
expires: 11,
default: Date.now
}
)}
이것은 현재의 Mongoose 문서에서 이것에 따라 저에게 효과가 있었던 해결책입니다.
npm 라이브러리가 있습니다 - 'mongoose-ttl'과
var schema = new Schema({..});
schema.plugin(ttl, { ttl: 5000 });
이 라이브러리의 모든 옵션을 볼 수 있습니다. https://www.npmjs.com/package/mongoose-ttl
const Schema = new mongoose.Schema({id: {
type: Number},
createdAt: {
type: Date, expires: '4h', index: true,
default: Date.now}});
추가해야 합니다.index: true
스키마를 생성하는 동안
2022년 9월 Mongoose 6.5.4를 사용한 작업 솔루션
여기에 있는 어떤 대답도 저에게 효과가 없었지만, 저는 마침내 최신 버전을 사용하여 그것을 작동시킬 수 있었습니다.Mongoose
현재 사용 가능,6.5.4
.
스키마가 다음과 같이 생겼다고 가정합니다.
const MySchema = new mongoose.Schema({
id: { type: Number },
myCustomTTLField: { type: Date }
});
myCustomTTLField
인덱스하고 만료를 제어할 필드입니다.이를 위해 스키마 정의 아래에 다음을 추가합니다.
MySchema.path('myCustomTTLField').index({ expires: 60 });
의 인수MySchema.path
TTL에 대해 색인화할 필드의 이름입니다.그expires
옵션은 에서 경과되는 시간(초)이어야 합니다.Date
로 대표되는.myCustomTTLField
문서가 삭제되기 전에.위의 예에서 문서는 저장된 날짜로부터 60초 후에 삭제됩니다.myCustomTTLField
전체 예:
const MySchema = new mongoose.Schema({
id: { type: Number },
myCustomTTLField: { type: Date }
});
MySchema.path('myCustomTTLField').index({ expires: 60 });
이것이 당신에게 효과가 있다면 알려주세요, 도움이 되었으면 좋겠습니다.Mongoose TTL은 그들의 문서가 탐색하기 어렵기로 악명 높기 때문에 오랫동안 제 입장에서 골칫거리였습니다.저는 여기 문서에 묻혀있는 작은 예시를 통해 이 해결책을 찾았습니다.
중요 참고: TTL은 날짜 + 만료 초에 지정된 정확한 시간에 발생하지 않습니다.이는 MongoDB의 백그라운드 삭제 프로세스가 작동하기 때문입니다.60초마다 실행되므로, 이론적으로 예상되는 TTL에서 최대 60초를 기다린 후 문서가 삭제된 것을 볼 수 있습니다.MongoDB 문서에서 더 많은 정보를 얻을 수 있습니다.
FWIW 나는 오직 그것만 얻을 수 있었습니다.expires
expiresAt라는 입니다.이것은 내 인터페이스와 이것을 Typescript에서 구현하기 위한 스키마입니다.
import { model, Schema, Types } from 'mongoose';
export interface ISession {
sessionId: string;
userId: Types.ObjectId;
role: string;
expiresAt?: Date;
}
const sessionSchema = new Schema<ISession>({
sessionId: { type: String, required: true, indexes: { unique: true} },
userId: { type: Schema.Types.ObjectId, required: true, ref: 'users'},
role: { type: String, required: true, enum: [ 'ADMIN', 'BASIC_USER' ]},
expiresAt: { type: Date, expires: '1h', default: Date.now }
}, { versionKey: false });
Mongoose 문서를 읽어보니 제안된 다른 모든 솔루션도 작동해야 할 것 같습니다.나는 왜 그것들이 나를 위한 것이 아니었는지 모르겠습니다.Mongoose 공식 문서는 여기에서 만료됩니다.
언급URL : https://stackoverflow.com/questions/14597241/setting-expiry-time-for-a-collection-in-mongodb-using-mongoose
'programing' 카테고리의 다른 글
git diff 도구, 직렬이 아닌 모든 diff 파일을 즉시 엽니다. (0) | 2023.05.06 |
---|---|
어떻게 만들까요?시스템 트레이에서만 실행되는 NET Windows Forms 응용 프로그램? (0) | 2023.05.06 |
파이썬 사전: u' chars 제거 (0) | 2023.05.06 |
WPF의 확인란 왼쪽에 있는 텍스트? (0) | 2023.05.06 |
스크립트 테스트를 위한 PowerShell의 에코 기능 (0) | 2023.05.06 |