sql >> Databáze >  >> NoSQL >> MongoDB

jak vložit číslo automatického přírůstku do mé sbírky mongoose

V návaznosti na tutoriál MongoDB Vytvořte automatické Pole inkrementace sekvence , musíte nejprve vytvořit samostatné counters sběr pro sledování poslední použité číselné řady. _id pole obsahuje název sekvence, tj. userID pole v kolekci uživatelů a seq pole obsahuje poslední hodnotu sekvence.

Nejprve vložte do kolekce čítačů počáteční hodnotu pro userID :

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

Po naplnění kolekce čítačů vygenerujte její schéma v Mongoose:

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

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

Poté předefinujte své uživatelské schéma tak, aby při uložení uživatelského modelu nejprve zavolalo findByIdAndUpdate() modelu čítače. metoda pro atomické zvýšení hodnoty seq a vrácení této nové hodnoty, kterou pak lze použít jako další userID hodnota:

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. Přírůstek findOneAndUpdate místo aktualizace v mongoose

  2. 7 způsobů, jak zkontrolovat verzi MongoDB

  3. MongoDB find()

  4. Získejte ID naposledy vloženého dokumentu v mongoDB s ovladačem Java