programing

mongoose를 사용하여 mongodb에서 컬렉션의 만료 시간 설정

goodsources 2023. 5. 6. 14:56
반응형

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와 잘 작동합니다.

예를 들어 여기서는 다음과 같이 설정합니다.expires2m(2분)에 몽구스는 120초로 변환됩니다.

var TestSchema = new mongoose.Schema({
  name: String,
  createdAt: { type: Date, expires: '2m', default: Date.now }
});

Mongoose는 백그라운드에서 인덱스를 만들고 자동 설정합니다.expireAfterSeconds이 경우에는120seconds(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.pathTTL에 대해 색인화할 필드의 이름입니다.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 나는 오직 그것만 얻을 수 있었습니다.expiresexpiresAt라는 입니다.이것은 내 인터페이스와 이것을 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

반응형