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.