固定集合需要事先创建,而且大小固定。
它有点类似环形队列,如果空间不足,则最早的文档会被删除,这意味着固定集合会在新文档插入的时候自动淘汰最早的文档。
它与普通集合有一个区别,默认情况下,固定集合没有索引,即便是"_id"也没有索引。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> db.createCollection("mycollection",{capped:true,size:100000}){ "ok" : 1 }
上图表示建立一个 mycollection集合,固定集合,大小为100000字节。
> db.createCollection("mycollectionwithmaxdocuments",{capped:true,size:100000,max:100}){ "ok" : 1 }
上面的代码表示另外设定了最大文档数量的属性为100.
~~~~~~~~~~~~~~~~~~
对于已经有的集合,可以通过convertToCapped命令来转变成固定集合。
关于排序
由于固定集合存储文档的顺序类似于环形队列,所以下面来看2个例子有个认识。
> db.mycollection.insert({"name":"a fan da"})> db.mycollection.insert({"name":"bbb"})> db.mycollection.insert({"name":"ccc"})> db.mycollection.find(){ "_id" : ObjectId("52b6d8fc2d1237e40f2ccb62"), "name" : "a fan da" }{ "_id" : ObjectId("52b6d9032d1237e40f2ccb63"), "name" : "bbb" }{ "_id" : ObjectId("52b6d9072d1237e40f2ccb64"), "name" : "ccc" }> db.mycollection.find().sort({"$natural":1}){ "_id" : ObjectId("52b6d8fc2d1237e40f2ccb62"), "name" : "a fan da" }{ "_id" : ObjectId("52b6d9032d1237e40f2ccb63"), "name" : "bbb" }{ "_id" : ObjectId("52b6d9072d1237e40f2ccb64"), "name" : "ccc" }> db.mycollection.find().sort({"$natural":-1}){ "_id" : ObjectId("52b6d9072d1237e40f2ccb64"), "name" : "ccc" }{ "_id" : ObjectId("52b6d9032d1237e40f2ccb63"), "name" : "bbb" }{ "_id" : ObjectId("52b6d8fc2d1237e40f2ccb62"), "name" : "a fan da" }
可以看到可以根据插入的顺序来自然或者逆序获得文档。