Le $set
de MongoDB L'opérateur de mise à jour remplace la valeur d'un champ par la valeur spécifiée.
Il est utilisé conjointement avec les opérations de mise à jour, par exemple lors de l'utilisation de update()
méthode pour mettre à jour un document.
Exemple
Supposons que nous ayons une collection appelée dogs
avec le document suivant :
{ "_id" : 1, "name" : "Wag", "weight" : 20 }
Et supposons que nous voulions modifier le poids du chien. Nous pouvons exécuter le update()
suivant commande pour mettre à jour le poids :
db.dogs.update(
{ _id: 1 },
{
$set: { weight: 30 }
}
)
Cela se traduira par la sortie suivante :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ce qui nous indique qu'un document a été mis en correspondance et modifié.
Vérifions la collection :
db.dogs.find()
Résultat :
{ "_id" : 1, "name" : "Wag", "weight" : 30 }
Nous pouvons voir que le poids a été mis à jour à la valeur spécifiée.
Il est également possible d'incrémenter les valeurs d'un montant spécifié, mais pour ce faire, nous aurions besoin d'utiliser le $inc
opérateur au lieu de $set
.
Mais cet article concerne uniquement le $set
opérateur, alors continuons.
Lorsque le champ n'existe pas
Si le champ que vous essayez de mettre à jour n'existe pas, le champ sera ajouté au document avec la valeur spécifiée.
Exemple :
db.dogs.update(
{ _id: 1 },
{
$set: { height: 40 }
}
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Nous pouvons voir qu'un document a été mis en correspondance et modifié.
Vérifions à nouveau la collection.
db.dogs.find()
Résultat :
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }
Alors maintenant, le document inclut une height
champ avec la valeur spécifiée.
Documents intégrés
Vous pouvez mettre à jour les valeurs dans les documents incorporés à l'aide de la notation par points. Si le chemin spécifié n'existe pas déjà, il est créé.
Exemple :
db.dogs.update(
{ _id: 1 },
{
$set: {
"meals.breakfast": "Fish",
"meals.lunch": "Chicken",
"meals.dinner": "Beef"
}
}
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Utilisons findOne()
pour retourner le document :
db.dogs.findOne()
Résultat :
{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40, "meals" : { "breakfast" : "Fish", "dinner" : "Beef", "lunch" : "Chicken" } }
Nous pouvons voir que le document intégré a été ajouté comme spécifié.
Tableaux
Vous pouvez mettre à jour des données dans des tableaux en utilisant la notation par points tout en spécifiant l'index de l'élément que vous souhaitez mettre à jour.
Supposons que nous ayons le document suivant :
{ "_id" : 1, "name" : "Wag", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }
Mettons à jour deux des éléments du tableau et le nom du chien.
db.dogs.update({
_id: 1
}, {
$set: {
"name": "Bark",
"awards.0": "Bottom Dog",
"awards.1": "Worst Dog"
}
})
Résultat :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Nous pouvons voir qu'un document a été mis en correspondance et modifié.
Et maintenant regardez le document.
db.dogs.findOne()
Résultat :
{ "_id" : 1, "name" : "Bark", "awards" : [ "Bottom Dog", "Worst Dog", "Biggest Dog" ] }