sql >> Databasteknik >  >> NoSQL >> MongoDB

hur man infogar autoincrement-nummer med min mangustsamling

Efter MongoDB-handledningen, Skapa en auto- Inkrementerande sekvensfält måste du först skapa en separat counters samling för att spåra den senast använda nummersekvensen. _id fältet innehåller sekvensnamnet, dvs userID fältet i användarsamlingen och seq fältet innehåller det sista värdet i sekvensen.

Till att börja med, infoga startvärdet för userID i räknarsamlingen :

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

Efter att ha fyllt i räknarsamlingen, generera dess schema i Mongoose:

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

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

Omdefiniera sedan ditt användarschema så att när du sparar en användarmodell först anropar räknarmodellens findByIdAndUpdate() metod för att atomiskt öka seq-värdet och returnera detta nya värde som sedan kan användas som nästa userID värde:

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. Vad är Map Only-jobb i Hadoop?

  2. MongoDB $pullAll

  3. Villkorlig Redis inställd/endast uppdatering med den senaste versionen?

  4. MongoDB Java Driver databas anslutning pooling med Tomcat