MongoDB文档过期太久(猫鼬)

时间:2018-09-28 15:12:09

标签: mongodb mongoose ttl

我将到期时间设置为24小时,但是文档在5到10分钟后过期(我没有为它计时)。我究竟做错了什么?我的架构:

const collectionSchema = new mongoose.Schema({
  userId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User"
  },
  name: {
    type: String,
    maxLength: 30,
    required: true
  },
  entries: [{ type: mongoose.Schema.Types.ObjectId, ref: "Entry" }],
  expireAt: { type: Date, expires: 60 * 60 * 24 }
});

在发布路线中,我有条件地设置了日期,以便登录的客户端获得数据持久性。

router.post("/", auth, async (req, res) => {
  let date = null;
  if (!req.user) {
    date = new Date();
  }
  try {
    const collection = {
      userId: req.body.userId,
      name: req.body.name,
      expireAt: date
    };
    const newCollection = await Collection.create(collection);
    res.send(newCollection);
  } catch (error) {
    res.send(error.message);
  }
});

我以为我遇到了时区问题,但是当我在MongoDB指南针中检查时间戳时,它与我的时区匹配。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

我对此进行了测试:

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

第二分钟后删除了文档商品,我还确认已正确创建TTL索引(默认为背景索引),且TTL为120秒。

尝试使用该时间格式,看看是否适合您。

  

还请注意,直到您的mongo模式对索引的任何预期更改都不会反映出来,   您手动删除上一个索引并启动您的应用   自动创建新的。

MongoDB版本: 3.6.5