Créez un champ unique d’auto-incrémentation avec de la mongoose

Étant donné un schéma:

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

Je veux rendre id unique et auto-incrémentation. J’essaie de réaliser la mise en œuvre de Mongodb, mais j’ai du mal à comprendre comment le faire correctement chez les mongooses.

Ma question est la suivante : quel est le bon moyen d’implémenter le champ auto-incrémenté chez les mongooses sans utiliser de plug-ins, etc.?

Voici un bon exemple d’implémentation de champs auto-incrémentés à l’aide de Mongoose:

 var CounterSchema = Schema({ _id: {type: Ssortingng, required: true}, seq: { type: Number, default: 0 } }); var counter = mongoose.model('counter', CounterSchema); var entitySchema = mongoose.Schema({ testvalue: {type: Ssortingng} }); 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 d’abord effectuer l’étape 1 de la documentation mongodb.

Oui, voici le “maigre” sur cette fonctionnalité.

Vous devez avoir cette collection dans votre firebase database mongo. Il agit comme un enregistrement unique 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 garantir que, même en cas de demandes simultanées, vous obtiendrez la clé unique renvoyée sans collision.

Mais mongodb n’implémente pas ce mécanisme de manière native, ils vous montrent comment le faire. Ils prévoient uniquement que _id soit utilisé 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-la dans l’événement Pre-save ou, mieux encore, pre-init côté serveur de collecte avant de l’enregistrer sur mongo.