Mongoose不会创buildTTL索引

这是我的mongoose模型:

var sessionSchema = new Schema({ _id: { type: String, required: true, index: { unique: true } }, user: { type: Schema.Types.ObjectId }, expire: { type: Date, index: { expireAfterSeconds: 21600 } } }) module.exports = mongoose.model('Session', sessionSchema) 

我需要能够设置一个date对象到期(通常是像Date.now加上几分钟),并在过期6小时后从对象中删除对象。

但是,我无法让Mongoose创build索引。 当我在mongo控制台中运行db.sessions.getIndexes()时,输出如下:

 [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "dev.sessions" } ] 

我也尝试过不同的语法,比如
expire: { type: Date, expires: 21600 } (mongoose的短手版本)。
我也尝试在模式级别定义索引:
sessionSchema.index({ expire: 1 }, { expireAfterSeconds: 21600 })
没有任何工作。

与其他人在SO上提出问题不同,我的索引根本就没有创build。 我也尝试删除集合和数据库,当它们被重新创build时,它们仍然不包含索引。

版本:Mongoose 3.8.19,MongoDB 2.6.5(OSX)和Node.js 0.10.33

编辑

更多信息:我试图直接从mongo控制台创build索引:
db.sessions.ensureIndex({"expire":1}, {expireAfterSeconds: 21600})
这似乎是工作(索引创build)。

但是,它不以任何方式与Mongoose合作。

显然问题是我在自定义_id字段上创build了一个索引。 MongoDB自己在该字段上创build一个索引,所以当Mongoose调用ensureIndex来创buildTTL索引时,两者都失败了。

请参阅https://github.com/LearnBoost/mongoose/issues/2459