MongoDB 數據集操作指令合集

島上碼農@公眾號同名 2021-08-15 22:34:25 阅读数:68

本文一共[544]字,预计阅读时长:1分钟~
mongodb 操作 指令 合集

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 的組成如下: image.png 由於前4字節是時間戳信息,因此可以利用_id 進行時間上的排序。當然,如果顯示指定了_id,那 MongoDB 不會生成_id

總結

本篇介紹了 MongoDB 數據集的基本操作,重點介紹了 capped collection 固定大小數據集的使用。在實際過程中,可以利用 capped collection 存儲那些隨著時間變得不重要的數據,從而節省空間,例如日志數據。

關注島上碼農
關注島上碼農
版权声明:本文为[島上碼農@公眾號同名]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815223358036D.html