猫鼬不会创建 TTL 索引
Mongoose doesn't create TTL indexes
这是我的猫鼬模型:
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)
我需要能够将日期对象设置为 expire(通常是 Date.now
加几分钟),并在过期 6 小时后从集合中删除该对象。
但是,我无法让猫鼬创建索引。当我在 mongo 控制台中运行db.sessions.getIndexes()
时,输出如下:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "dev.sessions"
}
]
我也尝试过不同的语法,例如
expire: { type: Date, expires: 21600 }
(猫鼬的速记版)。
我还尝试在架构级别定义索引:sessionSchema.index({ expire: 1 }, { expireAfterSeconds: 21600 })
没有一个工作。
与其他在SO上提问的人不同,我的索引根本没有创建。我也尝试删除集合和数据库,当它们被重新创建时,它们仍然不包含索引。
版本: 猫鼬 3.8.19, MongoDB 2.6.5 (OSX) 和 Node.js 0.10.33
编辑
更多信息:我尝试直接从 mongo 控制台创建索引,使用:db.sessions.ensureIndex({"expire":1}, {expireAfterSeconds: 21600})
这似乎正在工作(索引已创建)。
但是,它与猫鼬没有任何关系。
显然,问题是我在自定义_id
字段上创建了一个索引。MongoDB自己在该字段上创建一个索引,因此当Mongoose调用ensureIndex
创建TTL索引时,它两者都失败了。
请参阅 https://github.com/LearnBoost/mongoose/issues/2459
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在索引.html和应用.js [node.js] 之间共享变量
- 如何为高图中的区域线创建z索引
- 下拉列表在使用z索引放置在前面后停止工作
- 减去两个索引不同但值相同的整数
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- 用javascript查询lucene索引
- 使用它更新集合中的嵌套数组's索引
- 如何将ng选项的索引作为angularJs中的值传递给模型
- Javascript获取所有锚链接的索引
- 多维关联数组的最后一个索引
- 传递给 PHP 表单时 JavaScript 动态变量上的未定义索引
- 猫鼬不会创建 TTL 索引