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

Cambiar el nombre de un campo en una colección MongoDB

En MongoDB, puede cambiar el nombre de un campo al actualizar documentos en una colección.

Para cambiar el nombre de un campo, llame al $rename operador con el nombre actual del campo y el nuevo nombre. Esto cambia el nombre del campo en todos los documentos coincidentes que tienen un campo con ese nombre.

Ejemplo

Supongamos que tenemos una colección llamada employees con los siguientes documentos:

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Y supongamos que queremos cambiar el nombre del name campo a employee .

Podríamos hacer esto:

db.employees.updateMany( 
  { }, 
  { $rename: { "name": "employee" } } 
)

Salida:

{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }

Ahora, cuando usamos find() método para devolver los documentos de la colección, vemos el siguiente resultado:

db.employees.find()

Resultado:

{ "_id" : 1, "salary" : 55000, "employee" : "Sandy" }
{ "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
{ "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
{ "_id" : 4, "salary" : 45000, "employee" : "Chris" }
{ "_id" : 5, "salary" : 82000, "employee" : "Beck" }

Renombrar varios campos

Puede cambiar el nombre de varios campos separándolos con una coma.

Ejemplo:

db.employees.updateMany( 
  { }, 
  { $rename: { "employee": "e", "salary": "s" } } 
)

Salida:

{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }

Y así es como se ve la colección ahora:

{ "_id" : 1, "e" : "Sandy", "s" : 55000 }
{ "_id" : 2, "e" : "Sarah", "s" : 128000 }
{ "_id" : 3, "e" : "Fritz", "s" : 25000 }
{ "_id" : 4, "e" : "Chris", "s" : 45000 }
{ "_id" : 5, "e" : "Beck", "s" : 82000 }

Documentos incrustados

Puede usar la notación de puntos para actualizar los nombres de los campos en los documentos incrustados.

Documento de ejemplo:

db.pets.findOne()

Resultado:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"type" : "Dog",
		"weight" : 20,
		"awards" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		}
	}
}

Actualicemos algunos de los campos en el documento incrustado:

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.type": "details.t", 
      "details.weight": "details.w",
      "details.awards": "details.a"
    } 
  } 
)

Ahora, cuando revisamos el documento, vemos lo siguiente:

db.pets.findOne()

Resultado:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"Florida Dog Awards" : "Top Dog",
			"New York Marathon" : "Fastest Dog",
			"Sumo 2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}

También podemos actualizar los nombres de campo de los documentos que están incrustados en los documentos incrustados:

db.pets.updateMany( 
  { }, 
  { $rename: { 
      "details.a.Florida Dog Awards": "details.a.fda",
      "details.a.New York Marathon": "details.a.nym",
      "details.a.Sumo 2020": "details.a.s2020"
    } 
  } 
)

Y revisemos el documento nuevamente:

db.pets.findOne()

Resultado:

{
	"_id" : 1,
	"name" : "Wag",
	"details" : {
		"a" : {
			"fda" : "Top Dog",
			"nym" : "Fastest Dog",
			"s2020" : "Biggest Dog"
		},
		"t" : "Dog",
		"w" : 20
	}
}