MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come funziona l'operatore di aggiornamento $set in MongoDB

Il $set di MongoDB l'operatore di aggiornamento sostituisce il valore di un campo con il valore specificato.

Viene utilizzato insieme alle operazioni di aggiornamento, ad esempio quando si utilizza update() metodo per aggiornare un documento.

Esempio

Supponiamo di avere una collezione chiamata dogs con il seguente documento:

{ "_id" : 1, "name" : "Wag", "weight" : 20 }

E supponiamo di voler cambiare il peso del cane. Possiamo eseguire il seguente update() comando per aggiornare il peso:

db.dogs.update(
  { _id: 1 },
  {
     $set: { weight: 30 }
  }
)

Ciò risulterà nel seguente output:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Il che ci dice che un documento è stato abbinato e modificato.

Controlliamo la collezione:

db.dogs.find()

Risultato:

{ "_id" : 1, "name" : "Wag", "weight" : 30 }

Possiamo vedere che il peso è stato aggiornato al valore specificato.

È anche possibile aumentare i valori di un importo specifico, ma per farlo dovremmo usare il $inc operatore invece di $set .

Ma questo articolo riguarda il $set operatore, quindi continuiamo.

Quando il campo non esiste

Se il campo che stai cercando di aggiornare non esiste, il campo verrà aggiunto al documento con il valore specificato.

Esempio:

db.dogs.update(
  { _id: 1 },
  {
     $set: { height: 40 }
  }
)

Uscita:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Possiamo vedere che un documento è stato abbinato e modificato.

Controlliamo di nuovo la collezione.

db.dogs.find()

Risultato:

{ "_id" : 1, "name" : "Wag", "weight" : 30, "height" : 40 }

Quindi ora il documento include un height campo con il valore specificato.

Documenti incorporati

È possibile aggiornare i valori nei documenti incorporati utilizzando la notazione del punto. Se il percorso specificato non esiste già, viene creato.

Esempio:

db.dogs.update(
  { _id: 1 },
  {
     $set: { 
       "meals.breakfast": "Fish", 
       "meals.lunch": "Chicken", 
       "meals.dinner": "Beef" 
       }
  }
)

Uscita:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Usiamo findOne() per restituire il documento:

db.dogs.findOne()

Risultato:

{
	"_id" : 1,
	"name" : "Wag",
	"weight" : 30,
	"height" : 40,
	"meals" : {
		"breakfast" : "Fish",
		"dinner" : "Beef",
		"lunch" : "Chicken"
	}
}

Possiamo vedere che il documento incorporato è stato aggiunto come specificato.

Array

Puoi aggiornare i dati nelle matrici usando la notazione del punto mentre specifichi l'indice dell'elemento che vuoi aggiornare.

Supponiamo di avere il seguente documento:

{
	"_id" : 1,
	"name" : "Wag",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Aggiorniamo due degli elementi dell'array e il nome del cane.

db.dogs.update({ 
    _id: 1 
    }, { 
        $set: { 
            "name": "Bark",
            "awards.0": "Bottom Dog", 
            "awards.1": "Worst Dog"
        } 
})

Risultato:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Possiamo vedere che un documento è stato abbinato e modificato.

E ora guarda il documento.

db.dogs.findOne()

Risultato:

{
	"_id" : 1,
	"name" : "Bark",
	"awards" : [
		"Bottom Dog",
		"Worst Dog",
		"Biggest Dog"
	]
}