我想知道是否可以在嵌套文档上使用TTL.
我有Account
,我在里面Sessions
.Sessions
需要在30分钟后到期.我已经设置了所有内容但显然当我设置TTL索引时Account.Sessions.EndDateTime
它会删除整个Account
.我可以确保它只删除Session
吗?
这就是它在数据库中的样子.注意它将如何删除整个Account
而不仅仅是Session
什么时候EndDateTime
会发生.
{ "_id" : ObjectId("53af273888dba003f429540b"), "Email" : "steve@s3te5ve.com", "PasswordHash" : "CZaBEQRbwWNgJBjyhks7gH0Z3v5ZvDkW29pryF0DEXyE8rIw0NA4x39+uQneArKaUv97sP1e+e22YT1glbqQsw==", "PasswordSalt" : "100000.Qx4D8uj7oDcWHRTLGRRTDwVkw2UcaM52XkDR9k2ga073Ow==", "Sessions" : [ { "Token" : "da55cf0783c4249b26283948fcae6caa15df320ca456203045aea81cad691df8", "IpAddress" : "::1", "StartDateTime" : ISODate("2014-06-28T20:36:27.000Z"), "EndDateTime" : ISODate("2014-06-28T21:06:27.000Z") } ] }
这是我创建索引的地方.
if (!_db.Accounts.IndexExists("Sessions.EndDateTime")) { _db.Accounts.CreateIndex(IndexKeys.Ascending("Sessions.EndDateTime"), IndexOptions.SetTimeToLive(new TimeSpan(0))); }
Christian P.. 5
目前无法使用TTL索引。Mongod将在指定的秒数或特定的时钟时间后删除整个文档。
TTL依赖于mongod中的一个后台线程,该线程读取索引中日期类型的值,并从集合中删除过期的文档。
我建议您将会话子文档存储在单独的集合中,并在该集合上添加TTL索引。
如果您无法更改架构,则替代方法是创建一个后台作业,每60秒从您的集合中删除嵌套文档。
目前无法使用TTL索引。Mongod将在指定的秒数或特定的时钟时间后删除整个文档。
TTL依赖于mongod中的一个后台线程,该线程读取索引中日期类型的值,并从集合中删除过期的文档。
我建议您将会话子文档存储在单独的集合中,并在该集合上添加TTL索引。
如果您无法更改架构,则替代方法是创建一个后台作业,每60秒从您的集合中删除嵌套文档。