sql >> Database >  >> NoSQL >> MongoDB

hoe een automatisch ophogingsnummer in te voegen met mijn mangoestverzameling

Na de MongoDB-zelfstudie, Maak een automatisch Oplopend reeksveld , moet u eerst een aparte counters . maken verzameling om de laatst gebruikte nummerreeks bij te houden. De _id veld bevat de naam van de reeks, d.w.z. de userID veld in de gebruikersverzameling en de seq veld bevat de laatste waarde van de reeks.

Voer om te beginnen in de verzameling tellers de beginwaarde in voor de userID :

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

Nadat de verzameling tellers is gevuld, genereert u het schema in Mongoose:

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

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

Definieer vervolgens uw gebruikersschema opnieuw, zodat wanneer u een gebruikersmodel opslaat, het eerst de findByIdAndUpdate() van het tellermodel aanroept methode om de seq-waarde atomair te verhogen en deze nieuwe waarde te retourneren die vervolgens kan worden gebruikt als de volgende userID waarde:

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


  1. Meerdere verbindingen maken en beheren in Redis Python

  2. MongoDB verspreiden over EC2-regio's

  3. Dubbele records verwijderen met MapReduc

  4. MongoDB $type Query-operator