固定集合(Capped Collection)是一種尺寸固定的“循環(huán)”集合,可提供高效的創(chuàng)建、讀取、刪除等操作。這里所指的“循環(huán)”的意思是,當(dāng)分配給集合的文件尺寸耗盡時(shí),就會(huì)自動(dòng)開(kāi)始刪除最初的文檔,不需要提供任何顯式的指令。
如果文檔更新后增加了文檔的尺寸,那么固定集合會(huì)限制對(duì)文檔的更新。因?yàn)楣潭习凑沾疟P(pán)存儲(chǔ)的順序來(lái)保存文檔,所以能確保文檔尺寸不會(huì)增加磁盤(pán)分配的尺寸。固定集合最適合保存日志信息,緩存數(shù)據(jù)以及任何其他大容量數(shù)據(jù)。
要想創(chuàng)建固定集合,需要使用 createCollection 命令,并將 capped 選項(xiàng)設(shè)為 true,同時(shí)還需要指定集合的最大尺寸(以字節(jié)計(jì))。
>db.createCollection("cappedLogCollection",{capped:true,size:10000})
除了集合尺寸外,還可以使用 max 參數(shù)限制集合中的文檔最大數(shù)量。
>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
如果想要檢查集合是否固定,使用 isCapped 命令即可。
>db.cappedLogCollection.isCapped()
如想將現(xiàn)有集合轉(zhuǎn)化為固定集合,使用下列代碼:
>db.runCommand({"convertToCapped":"posts",size:10000})
上述代碼會(huì)將現(xiàn)有的 posts 集合轉(zhuǎn)化為固定集合。
默認(rèn)情況下,利用 find 查詢固定集合,結(jié)果會(huì)按照插入順序進(jìn)行顯示。但如果想按相反順序獲取文檔,可以使用 sort 命令,如下所示:
>db.cappedLogCollection.find().sort({$natural:-1})
關(guān)于固定集合,有以下幾個(gè)非常值得注意的要點(diǎn):