sql >> Database >  >> NoSQL >> MongoDB

Hoe de $set Update Operator werkt in MongoDB

De MongoDB $set update-operator vervangt de waarde van een veld door de opgegeven waarde.

Het wordt gebruikt in combinatie met update-bewerkingen, bijvoorbeeld bij het gebruik van de update() methode om een ​​document bij te werken.

Voorbeeld

Stel dat we een verzameling hebben met de naam dogs met het volgende document:

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

En stel dat we het gewicht van de hond willen veranderen. We kunnen de volgende update() . uitvoeren commando om het gewicht bij te werken:

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

Dit resulteert in de volgende uitvoer:

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

Wat ons vertelt dat één document is gematcht en aangepast.

Laten we de collectie eens bekijken:

db.dogs.find()

Resultaat:

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

We kunnen zien dat het gewicht is bijgewerkt naar de opgegeven waarde.

Het is ook mogelijk om waarden met een bepaald bedrag te verhogen, maar daarvoor moeten we de $inc gebruiken operator in plaats van $set .

Maar dit artikel gaat helemaal over de $set operator, dus laten we doorgaan.

Als het veld niet bestaat

Als het veld dat u probeert bij te werken niet bestaat, wordt het veld toegevoegd aan het document met de opgegeven waarde.

Voorbeeld:

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

Uitgang:

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

We kunnen zien dat één document is gematcht en gewijzigd.

Laten we de collectie nog eens bekijken.

db.dogs.find()

Resultaat:

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

Dus nu bevat het document een height veld met de opgegeven waarde.

Ingesloten documenten

U kunt waarden in ingesloten documenten bijwerken met behulp van puntnotatie. Als het opgegeven pad nog niet bestaat, wordt het gemaakt.

Voorbeeld:

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

Uitgang:

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

Laten we findOne() . gebruiken om het document terug te sturen:

db.dogs.findOne()

Resultaat:

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

We kunnen zien dat het ingesloten document is toegevoegd zoals gespecificeerd.

Arrays

U kunt gegevens in arrays bijwerken door puntnotatie te gebruiken terwijl u de index opgeeft van het element dat u wilt bijwerken.

Stel dat we het volgende document hebben:

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

Laten we twee van de array-elementen en de naam van de hond bijwerken.

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

Resultaat:

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

We kunnen zien dat één document is gematcht en gewijzigd.

En kijk nu naar het document.

db.dogs.findOne()

Resultaat:

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


  1. Hoe representeer je MongoDB GeoJSON-velden in een Mongoose-schema?

  2. Redis:Race Conditie en Single threaded

  3. Hoe Redis-datum in R . te converteren

  4. Mongoose findOneAndUpdate en runValidators werken niet