MongoDB 数据集Collections操作

2022-05-29  本文已影响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 存储那些随着时间变得不重要的数据,从而节省空间,例如日志数据。

上一篇下一篇

猜你喜欢

热点阅读