1

我需要在我的应用程序中的文档集合上设置 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);

因此,一天后,故事文档将过期,我需要该故事的参考资料从该人那里过期

4

2 回答 2

0

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

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

于 2015-06-28T04:14:29.960 回答
-1

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

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

于 2014-04-02T14:31:04.133 回答