Mise à jour des données du document MongoDB en utilisant mongo shell

Ce chapitre présente la mise à jour des données de document MongoDB via mongo shell. MongoDB prend en charge différentes façons de mettre à jour mises en œuvre par divers types d'opérateurs, et il prend également en charge plusieurs fonctions de mise à jour.

Préparer les données de test

Insérer un lot de données de test dans la collection inventory.

db.inventory.insertMany( [
   { item: "toile", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "tapis", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "tapis de souris", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "carnet", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "papier", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "agenda", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "carte postale", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "carnet de croquis", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "carnet de dessin", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

Syntaxe de l'opérateur de mise à jour

Pour mettre à jour les documents, MongoDB fournit plusieurs opérateurs de mise à jour (par exemple, $set) pour modifier les valeurs des champs.

Le format des paramètres de l'opérateur de mise à jour est le suivant :

{
  <opérateur de mise à jour>: { <champ1>: <valeur1>, ... },
  <opérateur de mise à jour>: { <champ2>: <valeur2>, ... },
  ...
}

Explication :

  • <opérateur de mise à jour>: Opérateur de mise à jour
  • : Nom du champ
  • : Paramètre du champ

Opérateur $set

Utilisé pour mettre à jour les documents et créer un nouveau champ si le champ n'existe pas.

Mise à jour d'un seul document

Mettre à jour un document en utilisant la méthode db.collection.updateOne().

db.inventory.updateOne(
   { item: "papier" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Explication de la mise à jour :

  • Tout d'abord, récupérez le premier document en utilisant la condition de requête (item = papier).
  • Utilisez l'opérateur $set pour mettre à jour la valeur du champ size.uom en cm et mettre à jour la valeur du champ status en P.
  • Utilisez l'opérateur $currentDate pour mettre à jour la valeur du champ lastModified à la date actuelle. Si le champ lastModified n'existe pas, $currentDate créera le champ.

Mise à jour de plusieurs documents

Utilisez la méthode db.collection.updateMany() pour mettre à jour plusieurs documents qui répondent à la condition.

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

Explication de la mise à jour :

  • Tout d'abord, récupérez tous les documents en utilisant la condition de requête (qty < 50).
  • Utilisez l'opérateur $set pour mettre à jour la valeur du champ size.uom en in et mettre à jour la valeur du champ status en P.
  • Utilisez l'opérateur $currentDate pour mettre à jour la valeur du champ lastModified à la date actuelle. Si le champ lastModified n'existe pas, $currentDate créera le champ.

Astuce : L'opérateur $lt représente la signification de moins que.

Remplacer le document

Utilisez la méthode db.collection.replaceOne() pour remplacer le contenu d'un document (à l'exception du champ _id). Le document de remplacement peut avoir des champs différents du document d'origine. Puisque le champ _id est immuable, il peut être omis. Cependant, si vous incluez le champ _id, la valeur id doit être cohérente avec l'id du document mis à jour.

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

Explication :

  • Tout d'abord, utilisez les critères de requête (item=paper) pour récupérer le premier document.
  • Remplacez le document correspondant par le contenu du deuxième paramètre de la méthode replaceOne.

Comportement de mise à jour

Atomicité

Toutes les opérations d'écriture dans MongoDB sont atomiques au niveau du document individuel.

Champ _id

Le champ _id est immuable et ne peut pas être mis à jour.