MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

wie man eine Autoinkrement-Nummer mit meiner Mungo-Sammlung einfügt

Folgen Sie dem MongoDB-Tutorial, Create an Auto- Inkrementierendes Sequenzfeld , müssen Sie zuerst einen separaten counters erstellen Sammlung, um die zuletzt verwendete Zahlenfolge zu verfolgen. Die _id Feld enthält den Sequenznamen, d.h. die userID Feld in der Benutzersammlung und dem seq Feld enthält den letzten Wert der Sequenz.

Fügen Sie zunächst den Anfangswert für die userID in die Counters-Sammlung ein :

db.counter.insert(
   {
      "_id": "userID",
      "seq": 0
   }
)

Generieren Sie nach dem Füllen der Zählersammlung ihr Schema in Mongoose:

var counterSchema = mongoose.Schema({
    "_id": { "type": String, "required": true },
    "seq": { "type": Number, "default": 0 }
});

var counter = mongoose.model('counter', counterSchema);

Definieren Sie dann Ihr Benutzerschema neu, sodass es beim Speichern eines Benutzermodells zuerst findByIdAndUpdate() des Zählermodells aufruft Methode, um den seq-Wert atomar zu erhöhen und diesen neuen Wert zurückzugeben, der dann als nächste userID verwendet werden kann Wert:

var userSchema = mongoose.Schema({
    "userID": { "type": String, "required": true },
    "firstname": { "type": String },
    "lastname": { "type": String },
    // other properties ...
    }, { "collection": "user" }
);

userSchema.pre("save", function (next) {
    var doc = this;
    counter.findByIdAndUpdate(
        { "_id": "userID" }, 
        { "$inc": { "seq": 1 } }
    , function(error, counter)   {
        if(error) return next(error);
        doc.userID = counter.seq.toString();
        next();
    });
});