Latest web development tutorials

MongoDB aumentare automaticamente

MongoDB non è la stessa di funzionalità SQL per crescere automaticamente, _id di MongoDB è di 12 byte che identifica in modo univoco il sistema generato automaticamente.

Tuttavia, in alcuni casi, potremmo aver bisogno di implementare ObjectId funzione di crescita automatica.

Perché MongoDB non implementa questa funzione, si può essere programmato per realizzare, raggiungeremo il seguente campo _id crescere per ovviare automaticamente collezione.


raccolta Utilizza contatori

Si consideri la seguente documentazione prodotti. Speriamo di ottenere da 1,2,3,4 campo _id alla funzione di crescita n automatico.

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

Per fare questo, creare un set di contatori, i valori di campo di sequenza automatica può essere lungo:

>db.createCollection("counters")

Ora inseriamo i seguenti documenti ai contatori della collezione, uso IDProdotto come chiave:

{
  "_id":"productid",
  "sequence_value": 0
}

campo sequence_value è una sequenza di valori da una crescita automatica dopo.

Utilizzare la seguente sequenza di comandi per inserire i contatori dei documenti della collezione:

>db.counters.insert({_id:"productid",sequence_value:0})

Creazione di funzione Javascript

Ora, creiamo la funzione getNextSequenceValue come un nome di sequenza di input, la sequenza specificata crescerà automaticamente di 1 e restituisce il valore della sequenza più recente. Nell'esempio in questa serie di articoli chiamato ProductID.

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
      });
   return sequenceDocument.sequence_value;
}

Utilizzare la funzione Javascript

Successivo useremo la funzione getNextSequenceValue per creare un nuovo documento e impostare il valore sequenza automatica documento _id restituito è:

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"})

Come si può vedere, si usa la funzione getNextSequenceValue per impostare il campo _ID.

Per verificare l'efficacia della funzione, si può utilizzare il seguente comando per leggere il documento:

>db.products.find()

Il comando precedente restituirà i seguenti risultati, abbiamo trovato campo _id è auto-crescita:

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }