我正在使用 Golang 和 MongoDB。我有一个集合,需要保存一个可以是持久性或易失性的文档。因此,如果它设置了到期日期(例如expireAt),则文档被认为是易失性的并被删除,否则它将保留在集合中,除非它被手动删除。
阅读此文档时,我发现了一个可以按我需要工作的索引。
基本上我需要在 mgo 中复制这种索引:
db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
db.log_events.insert( {
"expireAt": new Date('July 22, 2013 14:00:00'),
"logEvent": 2,
"logMessage": "Success!"
} )
我读过(我正在搜索此信息的来源),如果expireAt日期不是有效日期,则不会触发删除。因此,我认为我需要做的就是在需要时将 expireDate 设置为有效日期,否则我会将其保留为 Gotime.Time零值。
这是我的代码库
type Filter struct {
Timestamp time.Time `bson:"createdAt"`
ExpireAt time.Time `bson:"expireAt"`
Body string `bson:"body"`
}
// Create filter from data received via REST API.
var filter Filter
timestamp := time.Now()
if theUserAction == "share" { // This is action will set the document as volatile
filter.ExpireAt = time.Now().Add(24 * time.Hour * 14)
}
filter.Timestamp = timestamp
filter.Body = "A BODY"
// Store filter in database
session, err := mdb.GetMgoSession() // This is a wrapping method that returns a valid mgo session
if err != nil {
return NewErrorInternal("Error connecting to database", err)
}
defer session.Close()
// Get db with global data for legent
collection := session.DB(database).C(filtersCollection)
我的问题是:如何设置索引以便在expireAt密钥有效时删除文档?阅读有关索引类型的mgo 文档,似乎没有办法复制先前所述的索引,因为该库仅提供该ExpireAfter字段..
此外,假设零值可以被 mongodb 解释为无效日期是否有效?
从文档来看,January 1, year 1, 00:00:00.000000000 UTC 它实际上似乎是一个有效日期..
到目前为止我所想的是做这样的事情:
filtIdx := mgo.Index{
Key: []string{"expireAt"},
Unique: false,
Background: true,
Sparse: false,
ExpireAfter: 0,
}
30秒到达战场
相关分类