【问题标题】:How to create TTL based schema in NestJs using mangoose如何使用猫鼬在 NestJs 中创建基于 TTL 的模式
【发布时间】:2021-10-26 12:24:49
【问题描述】:

我正在尝试使用 mangoose@nestjs/mongoose 库在 NestJs(typeScript) 项目中创建自毁架构,但无法纠正实现它的方法。我知道如何在使用 js 的 express 框架中做到这一点,但没有找到任何带有 NestJs 的 TS 文档

还更新了我的代码,如下所示,但仍然无法正常工作

import { Prop, Schema, SchemaFactory, SchemaOptions } from '@nestjs/mongoose';
import * as mangoose from 'mongoose';

export type OtpDocument = Otp & mangoose.Document;

// @Schema({ timestamps: { createdAt: { type: Date, expires: 20 } } })
@Schema()
export class Otp {
  @Prop({ type: mangoose.Schema.Types.ObjectId, ref: 'User' })
  user: any;

  @Prop({ expires: 3600 })
  OTP: number;

  @Prop()
  createdAt: Date;

  @Prop({ default: Date.now() + 20000 })
  expireAt: Date;
}

export const OtpSchema = SchemaFactory.createForClass(Otp);
OtpSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });

【问题讨论】:

  • 你说的是expires猫鼬吗?也许您可以在“快递”中分享您的做法。
  • @AlexanderStaroselsky 参考此stackoverflow.com/questions/14597241/…
  • 所以指的是那个问题。你具体试过什么?您是否尝试将expires 添加到createdAt 属性?您是否尝试过创建index?您在添加这些片段时遇到了什么问题?
  • 是的,也试过了,还是不行,等我更新问题
  • TTL 仅适用于日期类型。您正在尝试申请一个无效的号码。

标签: javascript node.js typescript mongoose nestjs


【解决方案1】:

它适用于Date类型,可以通过在@Props装饰器中添加expires属性来实现,比如

 @Prop({ type: Date, expires: '2m', default: Date.now })
  createdAt: Date;

更多参考这里是完整的代码

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import * as mangoose from 'mongoose';
import { Types } from 'mongoose';

export type OtpDocument = Otp & mangoose.Document;

    @Schema()
    export class Otp {
      @Prop({ type: Date, expires: '2m', default: Date.now })
      createdAt: Date;
    
      @Prop()
      otp: number;
    }
    
    export const OtpSchema = SchemaFactory.createForClass(Otp);

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2012-04-22
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多