MongoDB 不删除 TTL 索引文档

Posted

技术标签:

【中文标题】MongoDB 不删除 TTL 索引文档【英文标题】:MongoDB not removing TTL indexed documents 【发布时间】:2016-08-03 20:31:58 【问题描述】:

我知道关于这个问题还有其他问题;没有,(我试过),已经解决了我的问题。

使用 MongoDB 3.2.1、Mongoose 4.4.x、节点 0.12.9 或 4.2.6。

Mongoose 架构如下:

var schema = new Schema(
  userId: type: Schema.Types.ObjectId, ref: 'User', required: true,
  createdAt: type: Date, required: true, default: Date.now, expires: 10
);

在 Mongo Shell 和 RoboMongo 中都验证了索引:

我尝试过在不同的字段上设置 TTL 索引,使用不同的创建索引的方法,以及其他一些事情。然而,文件仍然存在,即使在放置一夜之后,将 createdAt 字段编辑为过去的某个时间。

想法?

【问题讨论】:

【参考方案1】:

我有 MongoDB 3.2 并使用以下代码 sn-p 测试了解决方案。

var MongoClient = require('mongodb').MongoClient,
    assert = require('assert'),
    mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var url = "mongodb://localhost:27017/test"
mongoose.connect(url);

var schema = new Schema(
    userId: 
        type: Schema.Types.ObjectId,
        ref: 'User', required: true
    ,
    createdAt: 
        type: Date,
        required: true,
        default: Date.now,
        expires: 10
    
);

var User = mongoose.model('User', schema);

var user = new User( userId: new mongoose.Types.ObjectId );

user.save(function(err, doc) 
    if (err) 
        console.log(err);
    
    mongoose.disconnect();
);

我看到该文档大约在一分钟后被删除(不完全是 10 秒)。我建议你获取最新的 mongoose,然后再试一次。

【讨论】:

Mongoose 版本是 4.4.12,这是当前版本。我猜这是我机器上本地安装 Mongo 的问题。我今天将在暂存服务器上进行测试,看看是否有任何改变。

以上是关于MongoDB 不删除 TTL 索引文档的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 不删除 TTL 索引文档

mongodb 设置自动删除过期数据

MongoDB - TTL 索引 - 未删除的文档

MongoDB TTL 索引不会删除过期文档

mongodb TTL不删除文档

mongodb TTL不删除文档