mongodb 如何增加TTL expiresAfterSeconds时间?

myzjeezk  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(74)

我正在创建一个简单的应用程序,我有这样的模型

import mongoose from "mongoose";

const urlSchema = new mongoose.Schema(
  {
    originalUrl: { type: String, required: true },
    longUrl: { type: String, required: true, unique: true },
    shortUrl: { type: String, required: true, unique: true },
    click: {
      type: Number,
      default: 0,
    },
  },
  { timestamps: true }
);

export const Url = mongoose.model("Url", urlSchema);

字符串
所以现在的问题是,当在文档中创建这个模型的示例时,我发现有一个TTL索引,它设置了expiresAfterSeconds: 120,并且文档基本上在两分钟后自动删除,并且我希望文档在特定时间后删除,更像是3天,所有创建的文档在2分钟后删除,我意识到有{timestaps: true}会发生这种情况,当我摆脱它时,文档保持原样(文档不会自动删除)。我想知道为什么会发生这种情况,是否有一种方法可以将expiresAfterSeconds的时间增加到大约3天或更长时间,或者是否有一种方法可以以其他方式进行设置,以及将来的原因如何完全禁止设置expireAfterSeconds: 120,即使设置了{timestanps: true},因为我可能需要createdAtupdatedAt字段。我对mongoose和mongodb一般来说是相当陌生的,所以如果有人能帮助我,我会很感激,并解释为什么会发生这种情况,以及下次如何更好地避免这种情况。
另外,当我在mongo shell中运行我的db.urls.getIndexes()时,这是返回的内容,以帮助您更好地理解我正在经历的事情哈哈:

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  {
    v: 2,
    key: { longUrl: 1 },
    name: 'longUrl_1',
    background: true,
    unique: true
  },
  {
    v: 2,
    key: { shortUrl: 1 },
    name: 'shortUrl_1',
    background: true,
    unique: true
  },
  {
    v: 2,
    key: { createdAt: 1 },
    name: 'createdAt_1',
    background: true,
    expireAfterSeconds: 120
  }
]

odopli94

odopli941#

在您的架构中尝试此代码

import mongoose from "mongoose";

const urlSchema = new mongoose.Schema(
{
originalUrl: { type: String, required: true },
longUrl: { type: String, required: true, unique: true },
shortUrl: { type: String, required: true, unique: true },
click: {
  type: Number,
  default: 0,
 },
 createdAt: { type: Date, expires: "3d", default: Date.now },
},
{ timestamps: { createdAt: false, updatedAt: true } }
);

urlSchema.index({ createdAt: 1 }, { expireAfterSeconds: 0 });

export const Url = mongoose.model("Url", urlSchema);
);

字符串

相关问题