sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo funciona el operador de actualización $set en MongoDB

MongoDB $set El operador de actualización reemplaza el valor de un campo con el valor especificado.

Se usa junto con operaciones de actualización, por ejemplo, cuando se usa update() método para actualizar un documento.

Ejemplo

Supongamos que tenemos una colección llamada dogs con el siguiente documento:

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

Y supongamos que queremos cambiar el peso del perro. Podemos ejecutar el siguiente update() comando para actualizar el peso:

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

Esto dará como resultado el siguiente resultado:

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

Lo que nos dice que un documento fue emparejado y modificado.

Revisemos la colección:

db.dogs.find()

Resultado:

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

Podemos ver que el peso se ha actualizado al valor especificado.

También es posible incrementar los valores en una cantidad específica, pero para hacerlo necesitaríamos usar el $inc operador en lugar de $set .

Pero este artículo trata sobre el $set operador, así que continuemos.

Cuando el campo no existe

Si el campo que intenta actualizar no existe, el campo se agregará al documento con el valor especificado.

Ejemplo:

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

Salida:

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

Podemos ver que un documento fue emparejado y modificado.

Revisemos la colección nuevamente.

db.dogs.find()

Resultado:

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

Ahora el documento incluye una height campo con el valor especificado.

Documentos incrustados

Puede actualizar valores en documentos incrustados mediante la notación de puntos. Si la ruta especificada aún no existe, se crea.

Ejemplo:

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

Salida:

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

Usemos findOne() para devolver el documento:

db.dogs.findOne()

Resultado:

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

Podemos ver que el documento incrustado se ha agregado como se especifica.

Arreglos

Puede actualizar datos en matrices utilizando la notación de puntos mientras especifica el índice del elemento que desea actualizar.

Supongamos que tenemos el siguiente documento:

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

Actualicemos dos de los elementos de la matriz y el nombre del perro.

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

Resultado:

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

Podemos ver que un documento fue emparejado y modificado.

Y ahora mira el documento.

db.dogs.findOne()

Resultado:

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