Automatische Erhöhung der Dokumentnummer in Mongo / Mongoose

8

Meine App hat mehrere Benutzer, jeder Benutzer hat Dokumente. Jedes Dokument muss eine Sequenznummer haben, die in etwa so aussieht: 2013-1, 2013-2 (Jahr und Sequenznummer), oder vielleicht nur eine einfache Zahl: 1, 2, 3 ...

Momentan weise ich die Sequenznummer den Benutzereinstellungen zu, wenn das Mongoose-Dokument erstellt wird. Basierend auf dieser Sequenznummer und dem Zahlenformat aus den Benutzereinstellungen erzeuge ich die endgültige Dokumentnummer.

Ich habe festgestellt, dass wenn zwei Dokumente gleichzeitig erstellt werden, sie genau die gleiche Nummer erhalten, weil ich die Sequenznummer in den Einstellungen hochsetze, nachdem ich ein Dokument gespeichert habe. Aber ich ordne die Sequenznummer zu, wenn ich das Dokument erstelle (und noch nicht speichere), so dass die Sequenznummer für beide Dokumente genau gleich ist.

Ich brauche natürlich eine Möglichkeit, diese Sequenznummer beim Speichern automatisch zu inkrementieren ...

Wie kann ich sicherstellen, dass diese Nummer eindeutig ist und automatisch inkrementiert / generiert wird?

    
ragulka 22.01.2013, 08:23
quelle

4 Antworten

11

@emre und @WiredPraire wiesen mich in die richtige Richtung, aber ich wollte eine vollständige Mongoose-kompatible Antwort auf meine Frage geben. Ich endete mit der folgenden Lösung:

%Vor%

Bitte beachten Sie, dass es bei dieser Methode keine Möglichkeit gibt, den Nummernpfad im Schema zu verlangen, und es gibt auch keinen Sinn, da dieser automatisch hinzugefügt wird.

    
ragulka 22.01.2013, 13:12
quelle
3

Das erreichen Sie durch:

  1. create Sequenzgenerator , der nur ein anderes Dokument ist, das einen Zähler der letzten Nummer enthält.
  2. Verwenden Sie eine mongoose Middleware , um das automatische Inkrementieren des gewünschten Felds zu aktualisieren.

Hier ist ein funktionierendes und getestetes Beispiel mit der Todo App.

%Vor%

Sie können es in der Knotenkonsole wie folgt testen

%Vor%

Mit jedem neu erstellten Objekt wird die Priorität erhöht. Prost!

    
Adrian 29.10.2014 00:51
quelle
2

Dieser Code stammt aus dem MongoDB Handbuch und beschreibt das Making Das _id Feld Autoinkrement. Es kann jedoch auf jedes Feld angewendet werden. Sie möchten überprüfen, ob der eingefügte Wert unmittelbar nach dem Einfügen Ihres Dokuments in der Datenbank vorhanden ist. Wenn es bereits eingefügt wurde, erhöhen Sie den Wert und versuchen Sie dann erneut einzufügen. Auf diese Weise können Sie doppelte Werte erkennen und sie erneut erhöhen.

%Vor%

In diesem Beispiel ist f das Feld in Ihrem Dokument, das automatisch inkrementiert werden soll. Um dies zu erreichen, müssen Sie Ihr Feld UNIQUE machen, was mit Indizes möglich ist.

%Vor%     
emre nevayeshirazi 22.01.2013 08:40
quelle
2

Sie können mongoose-auto-increment package wie folgt verwenden:

%Vor%

Sie müssen das autoIncrement nur einmal initialisieren.

    
moorara 19.11.2015 17:51
quelle

Tags und Links