MongoDB没有删除TTL索引文档

时间:2016-04-13 00:51:25

标签: node.js mongodb mongoose

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

使用MongoDB 3.2.1,Mongoose 4.4.x,Node 0.12.9或4.2.6。

Mongoose Schema看起来像:

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中都验证了索引:

RoboMongo Index screencap

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

思想?

1 个答案:

答案 0 :(得分:0)

我有MongoDB 3.2并测试了以下代码片段的解决方案。

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秒钟)大致被清除。我建议你去买最新的猫鼬,然后再试一次。