sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur $set Update Operator fungerar i MongoDB

MongoDB $set update operator ersätter värdet på ett fält med det angivna värdet.

Den används i samband med uppdateringsoperationer, till exempel när du använder update() metod för att uppdatera ett dokument.

Exempel

Anta att vi har en samling som heter dogs med följande dokument:

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

Och anta att vi vill ändra hundens vikt. Vi kan köra följande update() kommando för att uppdatera vikten:

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

Detta kommer att resultera i följande utdata:

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

Vilket säger oss att ett dokument matchades och modifierades.

Låt oss kolla samlingen:

db.dogs.find()

Resultat:

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

Vi kan se att vikten har uppdaterats till det angivna värdet.

Det är också möjligt att öka värden med ett specificerat belopp, men för att göra det måste vi använda $inc operator istället för $set .

Men den här artikeln handlar om $set operatör, så låt oss fortsätta.

När fältet inte finns

Om fältet som du försöker uppdatera inte finns, läggs fältet till i dokumentet med det angivna värdet.

Exempel:

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

Utdata:

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

Vi kan se att ett dokument matchades och modifierades.

Låt oss kolla in samlingen igen.

db.dogs.find()

Resultat:

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

Så nu innehåller dokumentet en height fältet med det angivna värdet.

Inbäddade dokument

Du kan uppdatera värden i inbäddade dokument genom att använda punktnotation. Om den angivna sökvägen inte redan finns skapas den.

Exempel:

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

Utdata:

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

Låt oss använda findOne() för att returnera dokumentet:

db.dogs.findOne()

Resultat:

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

Vi kan se att det inbäddade dokumentet har lagts till som specificerat.

Arrayer

Du kan uppdatera data i arrayer genom att använda punktnotation samtidigt som du anger indexet för det element som du vill uppdatera.

Anta att vi har följande dokument:

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

Låt oss uppdatera två av arrayelementen och hundens namn.

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

Resultat:

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

Vi kan se att ett dokument matchades och modifierades.

Och titta nu på dokumentet.

db.dogs.findOne()

Resultat:

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


  1. MongoDB Replica Sets med Arbiters

  2. Det gick inte att ansluta till 127.0.0.1:27017, anledning:errno:111 Anslutningen nekades

  3. tar gzip mongo dump som MySQL

  4. Hur förbättrar jag Redis-serverns CPU-användning?