《MongoDB 自動增長》要點:
本文介紹了MongoDB 自動增長,希望對您有用。如果有疑問,可以聯系我們。
相關主題:非關系型數據庫
MongoDB 沒有像 SQL 一樣有自動增長的功效, MongoDB 的 _id 是系統自動生成的12字節唯一標識.
但在某些情況下,我們可能必要實現 ObjectId 自動增長功能.
由于 MongoDB 沒有實現這個功效,我們可以通過編程的方式來實現,以下我們將在 counters 集合中實現_id字段自動增長.
使用 counters 聚攏
考慮以下 products 文檔.我們希望 _id 字段實現 從 1,2,3,4 到 n 的自動增長功效.
{
"_id":1,
"product_name": "Apple iPhone",
"category": "mobiles"}
為此,創立 counters 集合,序列字段值可以實現自動長:
>db.createCollection("counters")
現在我們向 counters 聚攏中插入以下文檔,使用 productid 作為 key:
{
"_id":"productid",
"sequence_value": 0}
sequence_value 字段是序列通過自動增長后的一個值.
使用以下命令插入 counters 聚攏的序列文檔中:
>db.counters.insert({_id:"productid",sequence_value:0})
創立 Javascript 函數
現在,我們創立函數 getNextSequenceValue 來作為序列名的輸入, 指定的序列會自動增長 1 并返回最新序列值.在本文的實例中序列名為 productid .
>function getNextSequenceValue(sequenceName){
var sequenceDocument = db.counters.findAndModify(
{
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
new:true
});
return sequenceDocument.sequence_value;}
使用 Javascript 函數
接下來我們將使用 getNextSequenceValue 函數創立一個新的文檔, 并設置文檔 _id 自動為返回的序列值:
>db.products.insert({
"_id":getNextSequenceValue("productid"),
"product_name":"Apple iPhone",
"category":"mobiles"})>db.products.insert({
"_id":getNextSequenceValue("productid"),
"product_name":"Samsung S3",
"category":"mobiles"})
就如你所看到的,我們使用 getNextSequenceValue 函數來設置 _id 字段.
為了驗證函數是否有效,我們可以使用以下命令讀取文檔:
>db.products.find()
以上命令將返回以下成果,我們發現 _id 字段是自增長的:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
如您還有不明確的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
《MongoDB 自動增長》是否對您有啟發,歡迎查看更多與《MongoDB 自動增長》相關教程,學精學透。維易PHP學院為您提供精彩教程。