English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB non ha funzionalità di incrementazione automatica pronte all'uso come i database SQL. Di default, esso_id
Il campo ObjectId di 12 byte serve come chiave primaria per identificare univocamente il documento. Tuttavia, in alcune circostanze, potremmo voler che il campo _id abbia un valore automaticamente incrementale oltre all'ObjectId.
Poiché questa non è una funzione predefinita in MongoDB, la implementeremo utilizzando}}counters
La documentazione dei documenti MongoDB suggerisce di implementare questa funzione programmatically.
Vedi di seguitoproducts
Il campo _id dovrebbe essere una sequenza auto-incrementale di interi da 1,2,3,4 a n.
{ "_id":1, "product_name": "Apple iPhone" "category": "mobiles" }
Per fare questo, crea uncounters
Questa collezione traccia l'ultimo valore di sequenza di tutti i campi di sequenza.
>db.createCollection("counters")
Ora, creeremo il seguente documentoproductid
Inserisci come chiave nella collezione counters-
>db.counters.insert({ "_id":"productid", "sequence_value": 0 ) WriteResult({ "nInserted" : 1 }) >
Il campo sequence_value traccia l'ultimo valore della sequenza.
Inserisci questo documento di sequenza nella collezione counters utilizzando il seguente codice-
>db.counters.insert({_id:"productid",sequence_value:0})
Ora, creeremo una funzionegetNextSequenceValue
Questa funzione prende il nome della sequenza come input, aggiunge 1 al numero di sequenza e restituisce il numero di sequenza aggiornato. Nel nostro esempio, il nome della sequenza èproductid
。
>function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify({ query:{_id: sequenceName }, update: {$inc:{sequence_value:1}}, new:true }); return sequenceDocument.sequence_value; }
Ora, utilizzeremo la funzione getNextSequenceValue quando creiamo un nuovo documento e assegniamo il valore di sequenza restituito al campo _id del documento.
Inserisci i seguenti codici per aggiungere due documenti di esempio-
>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"}