Ita*_*Ale 7 javascript mongoose mongodb node.js
这是我的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)
Run Code Online (Sandbox Code Playgroud)
我需要能够将日期对象设置为过期(通常是Date.now
加上几分钟),并在过期6小时后将对象从集合中删除.
但是,我无法让Mongoose创建索引.当我db.sessions.getIndexes()
在mongo控制台中运行时,这是输出:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "dev.sessions"
}
]
Run Code Online (Sandbox Code Playgroud)
我也尝试过不同的语法,比如
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合作.
显然问题是我在自定义_id
字段上创建了索引。MongoDB 自己在该字段上创建一个索引,因此当 Mongoose 调用ensureIndex
创建 TTL 索引时,两者都失败了。
请参阅https://github.com/LearnBoost/mongoose/issues/2459
归档时间: |
|
查看次数: |
2867 次 |
最近记录: |