MongoDB har ikke out-of-the-box auto-tilvekst funksjonalitet som SQL-databaser. Som standard bruker den 12-byte objectID for _id
feltet som primærnøkkel for å identifisere dokumentene. Men det kan være situasjoner der vi kanskje ønsker den _id feltet for å ha noen automatisk økes verdi annet enn objectID.
Siden dette ikke er en standardfunksjon i MongoDB, vi vil programma oppnå denne funksjonaliteten ved å bruke en tellere
samling som foreslått av dokumentasjonen MongoDB.
Bruke teller Collection
Tenk deg følgende produkter
dokument. Vi ønsker at _id feltet for å være en automatisk økes heltall sekvens
fra 1,2,3,4 opp n product: {"_id". 1, "PRODUCT_NAME": "Apple iPhone", "kategori": "mobiler"}
For dette ved å opprette en tellere
samling som vil holde styr på den siste sekvensen verdi for alle sekvens feltene
> db.createCollection ("tellere". )
Nå vil vi sette inn følgende dokument i tellere samling med ProductID
som sin viktigste − product: {"_id": "ProductID", "sequence_value": 0}
feltet sequence_value
holder styr på den siste verdien av sekvensen
Bruk følgende kode for å sette inn denne sekvensen dokumentet i tellere samling −.
> db.counters.insert ( {_id: "ProductID", sequence_value: 0})
Opprette Javascript-funksjonen
Nå vil vi lage en funksjon getNextSequenceValue
som tar sekvensen navn som sin inngang, øke den sekvensnummer ved en og returnere den oppdaterte sekvensnummer. I vårt tilfelle er sekvensen navnet ProductID
> funksjon getNextSequenceValue (sequenceName) {var sequenceDocument = db.counters.findAndModify ({query:. {_ Id: sequenceName} oppdatering: {$ inc: {sequence_value: 1}}, nytt: true}); tilbake sequenceDocument.sequence_value;.}
Bruke Javascript-funksjonen
Vi vil nå bruke funksjonen getNextSequenceValue mens du oppretter et nytt dokument og tilordne den returnerte sekvens verdi som feltet _id dokumentets
Sett inn to eksempel dokumenter ved hjelp av følgende kode −
> db.products.insert ({"_id": getNextSequenceValue ("ProductID"), "PRODUCT_NAME": "Apple iPhone", "kategori": "mobiler"})> db .products.insert ({"_id": getNextSequenceValue ("ProductID"), "PRODUCT_NAME": "Samsung S3", "kategori": "mobiler"})
Som du ser, har vi brukt getNextSequenceValue funksjonen til innstilte verdien for _id feltet
For å verifisere funksjonalitet, la oss hente dokumentene finne kommandoen og minus ved hjelp;.
> db.prodcuts.find ()
Listen spørringen returnerte følgende dokumenter som har auto økes _id feltet − product: {"_id": 1, "PRODUCT_NAME": "Apple iPhone", "kategori": "mobiler"} {"_id": 2, "PRODUCT_NAME": "Samsung S3" "kategori": "mobiler"}