表(集合)相关 ############ .. warning:: Collection不需要明确创建,新增一条记录自动创建 明确创建表:: db.createCollection(name, options) 说明: name: 要创建的集合名称 options: 可选参数,指定有关内存大小及索引的选项 options 可以是如下参数: 字段 类型 描述 1. capped 布尔 (可选) 如果为 true,则创建固定集合。 固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 2. autoIndexId 布尔 3.2 之后不再支持该参数。(可选) 如为 true,自动在 _id 字段创建索引。默认为 false。 3. size 数值 (可选) 为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 4. max 数值 (可选) 指定固定集合中包含文档的最大数量。 示例: $ db.createCollection("runoob") $ db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } ) 表的使用:: // 特殊表名使用 db.getCollection("3 test").find() db.getCollection("3-test").find() db.getCollection("stats").find() //To format the printed result, you can add the.pretty() db.myCollection.find().pretty() print() print(tojson()) printjson() 删除表(集合):: db.collection.drop() 固定集合 Capped Collections =========================== 事先创建固定大小的集合:: db.createCollection("log", { capped : true, size : 5242880, max : 5000 } ) ​ capped:是否固定 size:集合大小,单位KB max:文档数量 判断是否为固定集合:: db.log.isCapped(); 将已存在的集合转为固定集合:: db.runCommand({"convertToCapped":"log",size:10000}) 排序:: db.log.find().sort( { $natural: -1 } ) 特性:: 类似环形队列,如果空间不足,会把老数据删除,为新的数据提供空间; 当指定文档数量上限时,必须同时指定大小; 淘汰机制只有在容量还没有满时才会依据文档数量来工作; 要是容量满了,淘汰机制会依据容量来工作; 优点:: 写入速度提升 固定集合中的数据被顺序写入磁盘上的固定空间,不会因为其他集合的一些随机性的写操作而“中断” 其写入速度非常快(不建立索引,性能更好); 固定集合会自动覆盖掉最老的文档 因此不需要再配置额外的工作来进行旧文档删除。 设置Job进行旧文档的定时删除容易形成性能的压力毛刺; 按照插入顺序的查询输出速度极快; 能够在插入最新数据时,淘汰最早的数据; 固定集合非常实用与记录日志等场景; 缺点:: 固定集合创建之后就不可以改变,只能将其删除重建(不安全); 创建固定集合,为固定集合指定文档数量,必须同时指定固定集合的大小,不管先达到哪一个限制,之后插入的新文档都会把最老的文档移除集合; 用convertToCapped将普通集合转换固定集合时: ⚠️原有索引会丢失,需手动创建 并且此转换命令没有限制文档数量的参数; 普通集合可以使用convertToCapped转换固定集合,但固定集合不可以转换为普通集合; ⚠️不可以对固定集合进行分片。 对固定集合中的文档可以进行更新操作,但更新不能导致文档的Size增长或缩小,否则更新失败: 如果要更新这个一个key 对应的value,更新后的值也必须为100个字节,大于100个字节不可以,小于100个字节也不可以。 不可以对固定集合执行删除文档操作,只能删除整个集合。 对集合估算size时,不要依据集合的storageSize ,而是依据集合的size。 storageSize是wiredTiger存储引擎采用高压缩算法压缩后的