特殊的索引和集合(八)

时间:2022-12-02 11:26:41

1.固定集合

特殊的索引和集合可自动增长可以容纳更多的数据,MongoDB中还有另一种不同类型的集合,叫做固定集合,固定集合需要事先创建好,而且它的大小是固定的。如果向已经满了的固定集合    中插入数据,最老的文档会被删除以释放空间,新插入的文档会占据这块空间。

创建名为test_coll1,大小为100000字节的固定集合

db.createCollection('test_coll1',{capped:true,size:100000})

特殊的索引和集合(八)

创建名为test_coll2,大小为100000字节,集合中大多可存100个文档

db.createCollection('test_coll2',{capped:true,size:100000,max:100})

创建固定集合时还有另一个选项,可以将已有的某个常规集合转换为固定集合,可以使用convertToCapped命令实现,但是无法将固定集合转换成非固定集合(只能将其删除)

db.runCommand({convertToCapped:'test1',size:10000})

2.TTL索引

TTL索引(time-to-live index,具有生命周期的索引),这种索引允许为每一个文档设置一个超时时间,一个文档到达预设置的老化程度之后就会被删除,这种类型的索引对于缓存问题非常有用,在ensureIndex中指定expireAfterSecs选项就可以创建一个TTL索引。

超时时间为24小时的文档删除

db.foo.createIndex({lastupdated:1},{expireAfterSeconds:60*60*24}) 

例子1:

创建表并新增数据

db.test4.insert({name:'zhao',age:13,createtime:new Date()})
db.test4.createIndex({createtime:1},{expireAfterSeconds:60}) #超过1分钟删除

特殊的索引和集合(八)

使用TTL时是有限制的:

1.如果要索引的字段已经在其他索引中使用,不能创建TTL索引
2.索引不能包含多个字段
3.如果定义的字段不存在,则永不过期
4.不能对capped集合创建TTL索引