W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
MongoDB 沒有像 SQL 一樣有自動增長的功能, MongoDB 的 _id 是系統(tǒng)自動生成的12字節(jié)唯一標識。
但在某些情況下,我們可能需要實現(xiàn) ObjectId 自動增長功能。
由于 MongoDB 沒有實現(xiàn)這個功能,我們可以通過編程的方式來實現(xiàn),以下我們將在 counters 集合中實現(xiàn)_id字段自動增長。
考慮以下 products 文檔。我們希望 _id 字段實現(xiàn) 從 1,2,3,4 到 n 的自動增長功能。
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
為此,創(chuàng)建 counters 集合,序列字段值可以實現(xiàn)自動長:
>db.createCollection("counters")
現(xiàn)在我們向 counters 集合中插入以下文檔,使用 productid 作為 key:
{ "_id":"productid", "sequence_value": 0 }
sequence_value 字段是序列通過自動增長后的一個值。
使用以下命令插入 counters 集合的序列文檔中:
>db.counters.insert({_id:"productid",sequence_value:0})
現(xiàn)在,我們創(chuàng)建函數(shù) 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; }
接下來我們將使用 getNextSequenceValue 函數(shù)創(chuàng)建一個新的文檔, 并設置文檔 _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 函數(shù)來設置 _id 字段。
為了驗證函數(shù)是否有效,我們可以使用以下命令讀取文檔:
>db.prodcuts.find()
以上命令將返回以下結果,我們發(fā)現(xiàn) _id 字段是自增長的:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"} { "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: