MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Fonctionnement de l'opérateur de mise à jour $set dans MongoDB

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"
	]
}