W MongoDB możesz zmienić nazwę pola podczas aktualizacji dokumentów w kolekcji.
Aby zmienić nazwę pola, wywołaj $rename operator z aktualną nazwą pola i nową nazwą. Spowoduje to zmianę nazwy pola we wszystkich zgodnych dokumentach, które mają pole o tej nazwie.
Przykład
Załóżmy, że mamy kolekcję o nazwie employees z następującymi dokumentami:
{ "_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 }
I załóżmy, że chcemy zmienić nazwę name pole do employee .
Moglibyśmy to zrobić:
db.employees.updateMany(
{ },
{ $rename: { "name": "employee" } }
) Wyjście:
{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 }
Teraz, gdy używamy find() metody zwracania dokumentów w kolekcji, widzimy następujący wynik:
db.employees.find() Wynik:
{ "_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" } Zmień nazwę wielu pól
Możesz zmienić nazwy wielu pól, oddzielając je przecinkami.
Przykład:
db.employees.updateMany(
{ },
{ $rename: { "employee": "e", "salary": "s" } }
) Wyjście:
{ "acknowledged" : true, "matchedCount" : 5, "modifiedCount" : 5 } A oto jak teraz wygląda kolekcja:
{ "_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 } Osadzone dokumenty
Możesz użyć notacji kropkowej, aby zaktualizować nazwy pól w osadzonych dokumentach.
Przykładowy dokument:
db.pets.findOne() Wynik:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
} Zaktualizujmy niektóre pola w osadzonym dokumencie:
db.pets.updateMany(
{ },
{ $rename: {
"details.type": "details.t",
"details.weight": "details.w",
"details.awards": "details.a"
}
}
) Teraz, gdy sprawdzamy dokument, widzimy:
db.pets.findOne() Wynik:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"a" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
},
"t" : "Dog",
"w" : 20
}
} Możemy również zaktualizować nazwy pól dokumentów, które są osadzone w osadzonych dokumentach:
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"
}
}
) I jeszcze raz sprawdźmy dokument:
db.pets.findOne() Wynik:
{
"_id" : 1,
"name" : "Wag",
"details" : {
"a" : {
"fda" : "Top Dog",
"nym" : "Fastest Dog",
"s2020" : "Biggest Dog"
},
"t" : "Dog",
"w" : 20
}
}