Optimistic Concurrency (versionKey)

Mongoose 🔴 Senior

Dé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.
#sgbd#interview#database#mongoose

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre