golang mgo TTL指数

时间:2015-12-22 22:52:42

标签: mongodb indexing go

如何使用golang和mongodb创建TTL(生存时间)索引? 这就是我目前正在尝试的方式:

sessionTTL := mgo.Index{
    Key:         []string{"created"},
    Unique:      false,
    DropDups:    false,
    Background:  true,
    ExpireAfter: session_expire} // session_expire is a time.Duration

if err := db.C("session").EnsureIndex(sessionTTL); err != nil {
    panic(err)
}

但如果我使用以下方式查找:

db.session.getIndexes()

session_expire设置为5 * time.Second。使用time.Now()将文档中“创建”字段设置为当前日期,因此我希望文档在5秒后删除。

2 个答案:

答案 0 :(得分:1)

所以问题是我不得不放弃这个集合。索引已存在,因此未使用到期约束重新创建。

答案 1 :(得分:0)

我试图使用这个问题的答案,并遇到了问题。考虑以下小改动:

sessionTTL := mgo.Index{
    Key:         []string{"created"},
    Unique:      false,
    DropDups:    false,
    Background:  true,
    ExpireAfter: 60 * 60} // one hour

if err := db.C("session").EnsureIndex(sessionTTL); err != nil {
    panic(err)
}

问题是,如果ExpireAfter不是time.Duration,则代码会自动失败。

我不得不改为:         ExpireAfter:time.Duration(60 * 60)* time.Second,