美文网首页
MongoDB 数据集Collections操作

MongoDB 数据集Collections操作

作者: 岛上码农 | 来源:发表于2022-05-29 10:30 被阅读0次

    MongoDB 的数据存储在不同的数据集(Collection)中,数据集类似于关系型数据库的数据表,只是 MongoDB 的数据实体是整个对象存储在数据集中的。相比关系型数据库的数据表操作,MongoDB 的更为简便。

    创建数据集

    创建数据集有两种方式,一种是在插入数据时,如果指定的数据集不存在则会自动创建;一种是显示地创建数据集。第一种方式验证,首先我们使用显示数据集命令查看所有已有的数据集。

    > show collections
    author
    crud
    test
    users
    

    然后执行下面的插入命令创建新的数据集 articles

    db.articles.insert({title: '文章1', content: '内容1'});
    

    再执行显示数据集的命令,可以看到新增了articles数据集。

    > show collections
    articles
    author
    crud
    test
    users
    

    另外一种方式就是使用命令 db.createCollection('数据集名称')显示创建数据集:

    db.createCollection('collection_test');
    

    固定大小数据集(capped collection)

    在 MongoDB 中提供了一种capped collection(固定大小数据集),这种数据集容量大小固定,存储空间超出后将会自动移除旧的数据,实现循环存储。这种非常适合做日志存储,可以设定一个容量,当日志存储过多时可以自动移除旧的日志数据。capped collection 语法如下,主要是使用一个参数配置:

    db.createCollection(
        'capped', 
        {capped: true, size: 512, max: 10}
    );
    

    我们先插入8条数据:

    { "_id" : "1", "name" : "码农1" }
    { "_id" : "2", "name" : "码农2" }
    { "_id" : "3", "name" : "码农3" }
    { "_id" : "4", "name" : "码农4" }
    { "_id" : "5", "name" : "码农5" }
    { "_id" : "6", "name" : "码农6" }
    { "_id" : "7", "name" : "码农7" }
    { "_id" : "8", "name" : "码农8" }
    { "_id" : "9", "name" : "码农9" }
    { "_id" : "10", "name" : "码农10" }
    

    然后继续插入:

    db.capped.insert({name: '码农11', _id: '11'});
    

    此时再查看数据的时候会发现第一个被移除了:

    { "_id" : "2", "name" : "码农2" }
    { "_id" : "3", "name" : "码农3" }
    { "_id" : "4", "name" : "码农4" }
    { "_id" : "5", "name" : "码农5" }
    { "_id" : "6", "name" : "码农6" }
    { "_id" : "7", "name" : "码农7" }
    { "_id" : "8", "name" : "码农8" }
    { "_id" : "9", "name" : "码农9" }
    { "_id" : "10", "name" : "码农10" }
    { "_id" : "11", "name" : "码农11" }
    

    这是因为在创建时限制了最大行数参数max为10,因此超出10行后会将会把前面插入的行移除。另外,如果我们的数据很长,超出了最大存储空间,也会以行为单位移除旧数据。

    db.capped.insert({name: '岛上码农 岛上码农 岛上码农 岛上码农 岛上码农 岛上码农', _id: '12'});
    

    反复执行上述命令3次后会发现,最后一次有2行不见了,这是因为总的存储空间超出了512字节,导致移除了更多的行数。也就是说固定大小的数据集,如果同时指定了行数和最大存储空间,则无论哪个先到达都会移除旧数据。
    固定大小数据集不允许删除数据,比如执行下面的操作会提示错误:cannot remove from a capped collection

    db.capped.deleteOne({_id: 7});
    db.capped.remove({});
    

    但可以直接使用 drop 命令移除数据集。判断数据集是否是 capped,可以使用isCapped方法查看:

    > db.capped.isCapped();
    true
    

    显示数据集

    显示数据库下的数据集使用 show collections命令即可。

    删除数据集

    删除数据集使用 drop 方法即可,格式为db.collection.drop()

    _id 产生

    如果不指定_id参数,MongoDB 默认为产生一个12字节的唯一_id_id 的组成如下:

    MongoDB 的 id 生成方式

    由于前4字节是时间戳信息,因此可以利用_id 进行时间上的排序。当然,如果显示指定了_id,那 MongoDB 不会生成_id

    总结

    本篇介绍了 MongoDB 数据集的基本操作,重点介绍了 capped collection 固定大小数据集的使用。在实际过程中,可以利用 capped collection 存储那些随着时间变得不重要的数据,从而节省空间,例如日志数据。

    相关文章

      网友评论

          本文标题:MongoDB 数据集Collections操作

          本文链接:https://www.haomeiwen.com/subject/jmdgprtx.html