MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como o $set Update Operator funciona no MongoDB


O $set do MongoDB O operador de atualização substitui o valor de um campo pelo valor especificado.

É usado em conjunto com operações de atualização, por exemplo, ao usar o update() método para atualizar um documento.

Exemplo


Suponha que tenhamos uma coleção chamada dogs com o seguinte documento:
{ "_id" : 1, "name" : "Wag", "weight" : 20 }

E suponha que queremos mudar o peso do cachorro. Podemos executar o seguinte update() comando para atualizar o peso:
db.dogs.update(
  { _id: 1 },
  {
     $set: { weight: 30 }
  }
)

Isso resultará na seguinte saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

O que nos diz que um documento foi correspondido e modificado.

Vamos conferir a coleção:
db.dogs.find()

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

Podemos ver que o peso foi atualizado para o valor especificado.

Também é possível incrementar valores por um valor especificado, mas para isso precisaríamos usar o $inc operador em vez de $set .

Mas este artigo é sobre o $set operador, então vamos continuar.

Quando o campo não existe


Se o campo que você está tentando atualizar não existir, o campo será adicionado ao documento com o valor especificado.

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

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

Podemos ver que um documento foi correspondido e modificado.

Vamos verificar a coleção novamente.
db.dogs.find()

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

Então agora o documento inclui uma height campo com o valor especificado.

Documentos incorporados


Você pode atualizar valores em documentos incorporados usando a notação de ponto. Se o caminho especificado ainda não existir, ele será criado.

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

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

Vamos usar findOne() para devolver o documento:
db.dogs.findOne()

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

Podemos ver que o documento incorporado foi adicionado conforme especificado.

Matrizes


Você pode atualizar dados em matrizes usando a notação de ponto enquanto especifica o índice do elemento que deseja atualizar.

Suponha que temos o seguinte documento:
{
	"_id" : 1,
	"name" : "Wag",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Vamos atualizar dois dos elementos do array e o nome do cachorro.
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 um documento foi correspondido e modificado.

E agora olhe para o documento.
db.dogs.findOne()

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