
- MongoDB 教程
- MongoDB - 首頁
- MongoDB - 概述
- MongoDB - 優點
- MongoDB - 環境
- MongoDB - 資料建模
- MongoDB - 建立資料庫
- MongoDB - 刪除資料庫
- MongoDB - 建立集合
- MongoDB - 刪除集合
- MongoDB - 資料型別
- MongoDB - 插入文件
- MongoDB - 查詢文件
- MongoDB - 更新文件
- MongoDB - 刪除文件
- MongoDB - 投影
- MongoDB - 限制記錄
- MongoDB - 排序記錄
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 複製
- MongoDB - 分片
- MongoDB - 建立備份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高階 MongoDB
- MongoDB - 關係
- MongoDB - 資料庫引用
- MongoDB - 覆蓋查詢
- MongoDB - 分析查詢
- MongoDB - 原子操作
- MongoDB - 高階索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - Map Reduce
- MongoDB - 文字搜尋
- MongoDB - 正則表示式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 有帽集合
- 自動遞增序列
- MongoDB 有用資源
- MongoDB - 問題和解答
- MongoDB - 快速指南
- MongoDB - 有用資源
- MongoDB - 討論
MongoDB - 自動遞增序列
MongoDB 沒有開箱即用的自動遞增功能,如 SQL 資料庫。預設情況下,它使用 12 位元組的 ObjectId 作為_id 欄位的主鍵,以唯一標識文件。但是,在某些情況下,我們可能希望 _id 欄位具有某個自動遞增的值,而不是 ObjectId。
由於這不是 MongoDB 的預設功能,因此我們將使用 MongoDB 文件中建議的計數器集合以程式設計方式實現此功能。
使用計數器集合
考慮以下產品文件。我們希望 _id 欄位為從 1、2、3、4 到 n 開始的自動遞增整數序列。
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
為此,建立一個計數器集合,它將跟蹤所有序列欄位的最後一個序列值。
>db.createCollection("counters")
現在,我們將在計數器集合中插入以下文件,其中productid 作為其鍵 -
> db.counters.insert({ "_id":"productid", "sequence_value": 0 }) WriteResult({ "nInserted" : 1 }) >
欄位sequence_value跟蹤序列的最後一個值。
使用以下程式碼將此序列文件插入計數器集合中 -
>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 函式
現在,我們在建立新文件並將其返回的序列值分配為文件的 _id 欄位時,將使用函式 getNextSequenceValue。
使用以下程式碼插入兩個示例文件 -
>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 欄位的值。
為了驗證功能,讓我們使用 find 命令獲取文件 -
>db.products.find()
上述查詢返回了以下具有自動遞增 _id 欄位的文件 -
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
廣告