web-dev-qa-db-fra.com

Créez un champ d'auto-incrémentation unique avec la mangouste

Étant donné un schéma:

var EventSchema = new Schema({
    id: {
        // ...
    },
    name: {
        type: String
    },
});

Je veux rendre id unique et auto-incrémenté. J'essaie de réaliser implémentation de mongodb mais j'ai des problèmes pour comprendre comment le faire correctement dans mangouste.

Ma question est : quelle est la bonne façon d'implémenter le champ d'auto-incrémentation dans la mangouste sans utiliser de plugins et ainsi de suite?

22
Glen Swift

Voici un bon exemple d'implémentation de champs auto-incrémentés utilisant Mongoose:

var CounterSchema = Schema({
    _id: {type: String, required: true},
    seq: { type: Number, default: 0 }
});
var counter = mongoose.model('counter', CounterSchema);

var entitySchema = mongoose.Schema({
    testvalue: {type: String}
});

entitySchema.pre('save', function(next) {
    var doc = this;
    counter.findByIdAndUpdate({_id: 'entityId'}, {$inc: { seq: 1} }, function(error, counter)   {
        if(error)
            return next(error);
        doc.testvalue = counter.seq;
        next();
    });
});

Vous devez effectuer l'étape 1 de documentation mongodb tout d'abord.

31
edtech

Oui, voici le "maigre" sur cette fonctionnalité.

Vous devez avoir cette collection dans votre base de données mongo. Il agit comme un seul enregistrement de vérité d'allocation de clé simultanée si vous le souhaitez. L'exemple de Mongo vous montre comment effectuer une opération "atomique" pour obtenir la clé suivante et vous assurer que même s'il y a des demandes simultanées, vous serez assuré d'avoir la clé unique retournée sans collision.

Mais, mongodb n'implémente pas ce mécanisme nativement, ils vous montrent comment le faire. Ils ne prévoient que le _id à utiliser comme clé de document unique. J'espère que cela clarifie votre approche.

Pour développer l'idée, allez-y et ajoutez cette implémentation suggérée par mongo à votre modèle Mongoose défini et, comme vous l'avez déjà deviné, utilisez-le dans l'événement Pre-save ou mieux encore pré-init pour vous assurer de toujours générer un identifiant si vous travaillez avec un côté serveur de collecte avant de l'enregistrer sur mongo.

1
Biba

Vous pouvez également utiliser des packages externes fournis par mangouste.

plugin de séquence mangouste

plugin d'incrémentation automatique mangouste

0
PALLAMOLLA SAI