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