Latest web development tutorials

MongoDB automatisch erhöhen

MongoDB es ist nicht das gleiche wie SQL-Funktionen für das Wachstum automatisch, ist MongoDB die _id 12 Bytes, die das System eindeutig identifiziert automatisch generiert.

Doch in einigen Fällen müssen wir ObjectId automatische Wachstum Funktion zu implementieren.

Da MongoDB nicht über diese Funktion implementieren, können wir erreichen so programmiert werden, erzielen wir die folgende _id Feld automatisch Zähler Sammlung wachsen.


Verwenden Zähler Sammlung

Betrachten Sie die folgende Produkte Dokumentation. Wir hoffen, dass aus 1,2,3,4 _id Feld zu erreichen Funktion n automatische Wachstum.

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

Um dies zu tun, erstellen Sie einen Satz von Zählern, automatische Ablauffeldwerte kann lang sein:

>db.createCollection("counters")

Nun fügen wir die folgenden Dokumente an die Zähler in der Erfassung, Verwendung productid als Schlüssel:

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

sequence_value Feld ist eine Folge von Werten durch eine automatische Wachstum nach.

Verwenden Sie die folgende Befehlsfolge die Dokumentzähler der Sammlung einzufügen:

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

Erstellen von Javascript-Funktion

Nun, wir getNextSequenceValue Funktion als Eingangssequenz Namen, die angegebene Reihenfolge wird automatisch um 1 wachsen und gibt den aktuellen Sequenzwert erstellen. In dem Beispiel in diesem Artikel Serie namens productid.

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

Verwenden Sie die Javascript-Funktion

Als nächstes werden wir getNextSequenceValue Funktion erstellen Sie ein neues Dokument und legen Sie das Dokument _id automatische Sequenzwert zurückgegeben wird, verwenden:

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

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

Wie Sie sehen können, verwenden wir getNextSequenceValue Funktion die _id Feld zu setzen.

Um die Wirksamkeit der Funktion, um zu überprüfen, können wir den folgenden Befehl verwenden, um das Dokument zu lesen:

>db.products.find()

Der obige Befehl wird die folgenden Ergebnisse zurück, fanden wir _id Feld ist selbst Wachstum:

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

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