# 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.prodcuts.find()
```
以上命令將返回以下結果,我們發現 _id 字段是自增長的:
```
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}
{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
```
- NoSQL 簡介
- 什么是MongoDB ?
- window平臺安裝 MongoDB
- Linux平臺安裝MongoDB
- MongoDB 數據庫,對象,集合
- MongoDB - 連接
- PHP安裝MongoDB擴展驅動
- MongoDB 數據插入
- MongoDB使用update()函數更新數據
- MongoDB使用- remove()函數刪除數據
- MongoDB 查詢
- MongoDB條件操作符
- MongoDB條件操作符 - $type
- MongoDB Limit與Skip方法
- MongoDB 排序
- MongoDB 索引
- MongoDB 聚合
- MongoDB 復制(副本集)
- MongoDB 分片
- MongoDB 備份(mongodump)與恢復(mongorerstore)
- MongoDB 監控
- MongoDB Java
- MongoDB PHP
- MongoDB 關系
- MongoDB 數據庫引用
- MongoDB 覆蓋索引查詢
- MongoDB 查詢分析
- MongoDB 原子操作
- MongoDB 高級索引
- MongoDB 索引限制
- MongoDB ObjectId
- MongoDB Map Reduce
- MongoDB 全文檢索
- MongoDB 正則表達式
- MongoDB 管理工具: Rockmongo
- MongoDB GridFS
- MongoDB 固定集合(Capped Collections)
- MongoDB 自動增長
- 免責聲明