English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB bietet keine aus der Box verfügbaren automatischen Inkrementfunktionen wie SQL-Datenbanken. Standardmäßig wird_id
Feld12Der 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 Verwendungcounters
MongoDB-Dokumententipps, um diese Funktion programmgesteuert zu implementieren.
Sehen Sie sich das folgende anproducts
Dokument. 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 einecounters
Sammlung, die den letzten Sequenzwert aller Sequenzfelder verfolgt, erstellen.
>db.createCollection("counters")
Jetzt werden wir das folgende Dokumentproductid
als 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})
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; }
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"