English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB-Automatic Sequenz

MongoDB bietet keine aus der Box verfügbaren automatischen Inkrementfunktionen wie SQL-Datenbanken. Standardmäßig wird_idFeld12Der ObjectId der Bytes wird als Primärschlüssel verwendet, um Dokumente eindeutig zu identifizieren. In einigen Fällen möchten wir jedoch, dass das _id-Feld außer ObjectId auch einen automatischen inkrementierenden Wert hat.

Da dies nicht die Standardfunktion in MongoDB ist, werden wir durch die VerwendungcountersMongoDB-Dokumententipps, um diese Funktion programmgesteuert zu implementieren.

Verwenden Sie die Counter-Sammlung

Sehen Sie sich das folgende anproductsDokument. Wir möchten, dass das Feld _id ein von1,2,3,4eine von n beginnende inkrementelle Ganzzahlsequenz.

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

Dazu erstellen wir einecountersSammlung, die den letzten Sequenzwert aller Sequenzfelder verfolgt, erstellen.

>db.createCollection("counters")

Jetzt werden wir das folgende Dokumentproductidals Schlüssel in die Sammlung counters einzufügen-

> db.counters.insert({
	"_id":"productid",
	"sequence_value": 0
)
WriteResult({ "nInserted" : 1 )
>

sequence_value Feld verfolgt den letzten Wert der Sequenz.

Verwenden Sie den folgenden Code, um dieses Sequenzdokument in die Sammlung counters einzufügen-

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

Erstellen Sie eine Javascript-Funktion

Jetzt werden wir eine FunktiongetNextSequenceValue, diese Funktion nimmt den Sequenznamen als Eingabe und erhöht die Sequenznummer um1und geben Sie die aktualisierte Sequenznummer zurück. In unserem Beispiel ist der Sequenznameproductid

>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

Jetzt werden wir die Funktion getNextSequenceValue verwenden, um den zurückgegebenen Sequenzwert als Dokumentfeld_id zu verwenden.

Verwenden Sie den folgenden Code, um zwei Beispiel-Dokumente einzufügen-

>db.products.insert({
   "_id": getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category": "mobiles"
)
>db.products.insert({
   "_id": getNextSequenceValue("productid"),
   "Produktname": "Samsung S"3,
   "category": "mobiles"
)

Wie Sie sehen können, haben wir die getNextSequenceValue-Funktion verwendet, um den Wert des _id-Felds zu setzen.

Um die Funktion zu überprüfen, verwenden wir den find-Befehl, um Dokumente abzurufen-

>db.products.find()

Die obige Abfrage gibt die folgenden Dokumente mit dem automatisch incrementierenden _id-Feld zurück-

{ "_id": 1, "Produktname": "Apple iPhone", "category": "mobiles"}
{ "_id": 2, "Produktname": "Samsung S"3"category": "mobiles"