新聞中心
MongoDB 自動(dòng)增長(zhǎng)
MongoDB 沒(méi)有像 SQL 一樣有自動(dòng)增長(zhǎng)的功能, MongoDB 的 _id 是系統(tǒng)自動(dòng)生成的12字節(jié)唯一標(biāo)識(shí)。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括雙峰網(wǎng)站建設(shè)、雙峰網(wǎng)站制作、雙峰網(wǎng)頁(yè)制作以及雙峰網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,雙峰網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到雙峰省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
但在某些情況下,我們可能需要實(shí)現(xiàn) ObjectId 自動(dòng)增長(zhǎng)功能。
由于 MongoDB 沒(méi)有實(shí)現(xiàn)這個(gè)功能,我們可以通過(guò)編程的方式來(lái)實(shí)現(xiàn),以下我們將在 counters 集合中實(shí)現(xiàn)_id字段自動(dòng)增長(zhǎng)。
使用 counters 集合
考慮以下 products 文檔。我們希望 _id 字段實(shí)現(xiàn) 從 1,2,3,4 到 n 的自動(dòng)增長(zhǎng)功能。
{
"_id":1,
"product_name": "Apple iPhone",
"category": "mobiles"
}
為此,創(chuàng)建 counters 集合,序列字段值可以實(shí)現(xiàn)自動(dòng)長(zhǎng):
>db.createCollection("counters")
現(xiàn)在我們向 counters 集合中插入以下文檔,使用 productid 作為 key:
{
"_id":"productid",
"sequence_value": 0
}
sequence_value 字段是序列通過(guò)自動(dòng)增長(zhǎng)后的一個(gè)值。
使用以下命令插入 counters 集合的序列文檔中:
>db.counters.insert({_id:"productid",sequence_value:0})
創(chuàng)建 Javascript 函數(shù)
現(xiàn)在,我們創(chuàng)建函數(shù) getNextSequenceValue 來(lái)作為序列名的輸入, 指定的序列會(huì)自動(dòng)增長(zhǎng) 1 并返回最新序列值。在本文的實(shí)例中序列名為 productid 。
>function getNextSequenceValue(sequenceName){
var sequenceDocument = db.counters.findAndModify(
{
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
"new":true
});
return sequenceDocument.sequence_value;
}
使用 Javascript 函數(shù)
接下來(lái)我們將使用 getNextSequenceValue 函數(shù)創(chuàng)建一個(gè)新的文檔, 并設(shè)置文檔 _id 自動(dòng)為返回的序列值:
>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ù)來(lái)設(shè)置 _id 字段。
為了驗(yàn)證函數(shù)是否有效,我們可以使用以下命令讀取文檔:
>db.products.find()
以上命令將返回以下結(jié)果,我們發(fā)現(xiàn) _id 字段是自增長(zhǎng)的:
{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}
{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }
分享標(biāo)題:創(chuàng)新互聯(lián)MongoDB教程:MongoDB 自動(dòng)增長(zhǎng)
鏈接地址:http://www.5511xx.com/article/codepdp.html


咨詢
建站咨詢
