Mongoose 参考文档的 TTL 过期

Posted

技术标签:

【中文标题】Mongoose 参考文档的 TTL 过期【英文标题】:TTL expiration of Mongoose referenced document 【发布时间】:2014-05-13 14:05:56 【问题描述】:

我需要为我的应用程序中的文档集合设置 TTL,但还需要这些文档被另一个集合引用,我不确定这将如何工作?

在文档上设置 TTL 是否会在文档过期时从所有其他参考文档中删除该文档,还是我必须自己编写后端进程而不使用 mongoDb 的 TTL 索引?

我想要的功能的示例架构:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var personSchema = Schema(
    _id     : Number,
    name    : String,
    age     : Number,
    stories : [ type: Schema.Types.ObjectId, ref: 'Story' ]
);

var storySchema = Schema(
    _creator :  type: Number, ref: 'Person' ,
    createdAt:  type: Date, expires: 60*60*24 ,
    title    : String,
    fans     : [ type: Number, ref: 'Person' ]
);

var Story  = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);

所以一天后,Story 文档将过期,我需要该故事的 ref 从该人过期

【问题讨论】:

【参考方案1】:

您无法使用 TTL 索引来处理此问题。 您可以使用 cron 作业/计划任务来删除旧文档。

我建议您阅读this,这是一种在 MongoDb 上实现后台进程的轻量级方式。

【讨论】:

【参考方案2】:

内置的 TTL 文档过期不支持删除对过期文档的引用。

如果需要,您需要在自己的代码中提供该功能。

【讨论】:

以上是关于Mongoose 参考文档的 TTL 过期的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 不删除 TTL 索引文档

MongoDB 不删除 TTL 索引文档

Mongoose 过期属性无法正常工作

如何使子文档在猫鼬的特定日期过期?

为啥 MongoDB 子文档过期会删除父文档?

Mongoose 不参考新保存的文档填充以前保存的文档