MongoDB Auto-Inkrement

MongoDB hat keine Auto-Increment-Funktion wie SQL. MongoDBs _id ist eine eindeutige 12-Byte-Kennung, die automatisch vom System generiert wird.

In manchen Fällen müssen wir jedoch Auto-Inkrement-Funktionalität für ObjectId implementieren.

Da MongoDB diese Funktion nicht implementiert, können wir sie programmatisch umsetzen. Im Folgenden implementieren wir Auto-Inkrement für das Feld _id in der counters-Collection.


counters-Collection verwenden

Betrachten Sie das folgende products-Dokument. Wir möchten, dass das Feld _id eine Auto-Inkrement-Funktionalität von 1, 2, 3, 4 bis n hat.

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

Erstellen Sie dazu eine counters-Collection. Der Wert des Sequenzfelds kann automatisch inkrementiert werden:

>db.createCollection("counters")

Jetzt fügen wir das folgende Dokument in die counters-Collection ein und verwenden productid als Schlüssel:

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

Das Feld sequence_value ist der Wert, nachdem die Sequenz automatisch inkrementiert wurde.

Verwenden Sie den folgenden Befehl, um in das Sequenzdokument der counters-Collection einzufügen:

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

JavaScript-Funktion erstellen

Nun erstellen wir eine Funktion getNextSequenceValue, die den Namen der Sequenz als Eingabe erhält. Die angegebene Sequenz wird um 1 automatisch inkrementiert und gibt den neuesten Sequenzwert zurück. In diesem Beispiel ist der Sequenzname productid.

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

JavaScript-Funktion verwenden

Als Nächstes verwenden wir die Funktion getNextSequenceValue, um ein neues Dokument zu erstellen und die _id des Dokuments automatisch auf den zurückgegebenen Sequenzwert zu setzen:

>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, verwenden wir die Funktion getNextSequenceValue, um das Feld _id festzulegen.

Um zu überprüfen, ob die Funktion funktioniert, können wir das Dokument mit dem folgenden Befehl lesen:

>db.products.find()

Der obige Befehl gibt das folgende Ergebnis zurück. Wir können sehen, dass das Feld _id automatisch inkrementiert wird:

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

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