【发布时间】:2015-01-09 15:22:54
【问题描述】:
这是我的猫鼬模型:
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.now 加上几分钟)并在过期 6 小时后从集合中删除该对象。
但是,我无法让 Mongoose 创建索引。当我在 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 提出问题的人不同,我的索引根本没有创建。我也尝试过删除集合和数据库,当它们重新创建时,它们仍然不包含索引。
版本:Mongoose 3.8.19、MongoDB 2.6.5 (OSX) 和 Node.js 0.10.33
编辑
更多信息:我尝试直接从 mongo 控制台创建索引,使用:db.sessions.ensureIndex({"expire":1}, {expireAfterSeconds: 21600})
这似乎有效(索引已创建)。
但是,它在任何情况下都不适用于 Mongoose。
【问题讨论】:
-
我感觉这是 Mongoose 的一个错误。归档github.com/LearnBoost/mongoose/issues/2459
-
我真的很想知道这是否有效,遇到了同样的问题。
标签: javascript node.js mongodb mongoose