在 MongoDB 中,固定集合指的是事先创建,并且大小固定的集合。即假设一个集合设置了固定大小为 100,再添加一条文档的时候,会把最前面的文档剔除,永远只保留 100 条数据。
固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景。
比如日志文件,聊天记录,通话信息记录等只需保留最近某段时间内的应用场景,都会使用到 MongoDB 的固定集合。
当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。
db.createCollection("collection_name",{capped:true, size:1024});
参数 | 描述 |
---|---|
collection_name | 集合名 |
通过设置 capped 为 true 来创建一个固定集合,通过 size 参数,来指定固定集合的大小,这里限制固定集合只能存放 1024 个字节。
db.createCollection("collection_name",{capped:true, size:1024, max:100});
参数 | 描述 |
---|---|
collection_name | 集合名 |
通过设置 capped 为 true 来创建一个固定集合,通过 size 参数,来指定固定集合的大小,这里限制固定集合只能存放 1024 个字节。
同时,还可以限制最多只能存放 100 条记录。
我们首先,使用 mongo 命令,连接上数据库,具体命令如下:
mongo
如下图所示:
现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:
use haicoder
现在,我们创建一个固定集合,具体命令如下:
db.createCollection("haicoder",{capped:true, size:1024, max:4});
执行完毕后,此时,如下图所示:
我们使用 insert 插入记录,具体命令如下:
db.haicoder.insert([ {"url":"haicoder.net/cpp", "course":"cpp"}, {"url":"haicoder.net/golang", "course":"golang"} ])
执行完毕后,此时,如下图所示:
现在,我们再次插入两条记录,具体命令如下:
db.haicoder.insert([ {"url":"haicoder.net/java", "course":"java"}, {"url":"haicoder.net/mongodb", "course":"mongodb"} ])
执行完毕后,此时,如下图所示:
我们看到,我们再次成功插入了两条记录,现在,我们查看所有的记录,具体命令如下:
db.haicoder.find({}, {_id:0})
执行完毕后,此时,如下图所示:
我们再次插入一条记录,具体命令如下:
db.haicoder.insert({"url":"haicoder.net/mysql", "course":"mysql"})
执行完毕后,我们再次查看所有记录,此时,如下图所示:
我们看到,最新插入的记录已经被删除了,被后来的记录覆盖了。
在 MongoDB 中,固定集合指的是事先创建,并且大小固定的集合。即假设一个集合设置了固定大小为 100,再添加一条文档的时候,会把最前面的文档剔除,永远只保留 100 条数据。
固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景。