MongoDB Auto-Økning Sequence

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"}



Next Page:No