我正在使用mongoose架构中的expires
字段来设置给定字段的到期时间。例如:
var Crumbs = new Schema({
...
timestamp: {
type: Date,
expires: 3600,
required: true
},
...
});
效果是预期的,如果索引以前不存在,则在MongoDB 中创建以下索引:
> db.crumbs.getIndexes()
[
...
{
"v" : 2,
"key" : {
"timestamp" : 1
},
"name" : "timestamp_1",
"ns" : "mydb.crumbs",
"expireAfterSeconds" : 36000,
"background" : true
}
]
但是,如果索引以前存在,则不会创建。例如,如果我在代码中更改为expires: 360
并重新运行我的程序,则MongoDB中的"expireAfterSeconds"
保持36000
。
有没有办法强制索引使用模式中定义的值,即使索引已经存在?
答案 0 :(得分:1)
您无法从架构定义中执行此操作。
最好的方法是直接在db中删除索引。
或者,从脚本中删除它。 E.g。
mongoose.connections[0].collections("collectionname")
.dropIndex("propertyName",callback)
答案 1 :(得分:0)
感谢Alex Blex提示,我终于解决了这个问题。首先删除索引,然后使用新的到期值重新创建:
mongoose.connections[0].collections.crumbs.dropIndex({timestamp: 1}, function (error) {
if (error) {
// This happens typically if the index doesn't exist but it doesn't hurt anyway
}
mongoose.connections[0].collections.crumbs.ensureIndex({timestamp: 1}, {expireAfterSeconds: 360});
});