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();
});
});