Optimistic Concurrency (versionKey)
Mongoose 🔴 SeniorDéfinition
Mongoose ajoute par défaut un champ __v (versionKey) incrémenté a chaque modification d'un tableau. Combine a l'option optimisticConcurrency: true du schema, save() échoué avec une VersionError si le document a été modifie entre la lecture et l'écriture, évitant d'écraser silencieusement les changements d'un tiers.
Analogie
Comme éditer un document partage qui refuse ta sauvegarde si quelqu'un d'autre l'a déjà modifie entre-temps, plutôt que d'écraser son travail.
Exemple de code
const schema = new Schema(
{ stock: Number },
{ optimisticConcurrency: true }
);
const Product = mongoose.model('Product', schema);
const p = await Product.findById(id);
p.stock -= 1;
await p.save(); // VersionError si __v a change
Cas d'usage
Éviter les écrasements concurrents sur un document a forte contention (stock, compteur partage).
Anti-pattern
Désactiver versionKey sur un modèle a forte concurrence d'écriture sans mécanisme de verrouillage alternatif.
Termes liés
Fiche mise à jour le 2026-09-27