MongoDB cung cấp nhiều toán tử cập nhật trường để cập nhật giá trị của các trường. Toán tử $rename là một trong những toán tử đó. Toán tử $rename được sử dụng để thay đổi tên của một trường. Tên mới của trường phải khác với tên cũ của trường
Điểm quan trọng
- Toán tử $rename thực hiện thao tác $unset trên cả tên cũ và tên mới trước khi thực hiện thao tác $set trên tên mới
- Nó cũng có thể hoạt động với mảng hoặc tài liệu lồng nhau
- Theo yêu cầu của bạn, bạn có thể sử dụng toán tử này trong findAndModify[], like[], update[], v.v.
- Nếu trường đã cho không tồn tại để đổi tên trong tài liệu, thì toán tử $rename không làm gì cả
Cú pháp của toán tử $rename
ví dụ
Trong các ví dụ sau, chúng tôi đang làm việc với
>db.employees.find[].pretty[] { "_id" : 1, "employee_name" : "Tin", "father_name" : "Thor", "department" : "Tester", "address" : "London", "joinning" : 2020, "phone_no" : 9856321478, "gender" : "Male", "age" : 20, "salary" : 10000 } { "_id" : 2, "employee_name" : "John", "father_name" : "Mick", "department" : "Tester", "address" : "NewYork", "joining" : 2015, "phone_no" : 7896541478, "gender" : "Male", "age" : 23, "salary" : 20000, "report_lastDate" : ISODate["2021-08-05T00:00:00Z"] } { "_id" : 3, "employee_name" : "Ammy john", "father_name" : "John", "department" : "Software developer", "address" : "London", "joining" : 2019, "phone_no" : 7985631478, "gender" : "Female", "age" : 26, "salary" : 15000 } { "_id" : 4, "employee_name" : "Reeza", "father_name" : "Reeza Hendricks", "department" : "Tester", "address" : "USA", "joining" : 2020, "phone_no" : 7412563278, "gender" : "Male", "age" : 22, "salary" : 20000 } { "_id" : 5, "employee_name" : "John Lewis", "father_name" : "Lewis", "department" : "Software developer", "address" : "London", "joining" : 2015, "phone_no" : 9632587418, "gender" : "Male", "age" : 25, "salary" : 25000, } { "_id" : 6, "employee_name" : "Temba", "father_name" : "George", "department" : "Tester", "address" : "NewYork", "joining" : 2018, "phone_no" : 8965247418, "gender" : "Male", "age" : 24, "salary" : { "first_month" : 15000, "second_month" : 18000, "bonus" : 2000 } }
ví dụ 1. Đổi tên một trường duy nhất
Trong ví dụ này, chúng tôi đang đổi tên của "tiền lương. trường_tháng_đầu tiên" thành "lương. tháng" trong tài liệu nhân viên có employee_name là Temba
Toán tử $rename được sử dụng để cập nhật tên của một trường. Cần phải đề cập đến tên trường mới khác với tên trường hiện có
cú pháp
{$rename: { : , : , .. } }
Thông số
TênMô tảold_name1,old_name2tên cũ của cột hoặc trườngnew_name1,new_name2tên mới của cột hoặc trường
Tên cơ sở dữ liệu của chúng tôi là 'myinfo' và tên bộ sưu tập của chúng tôi là "nhân viên". Đây, là bộ sưu tập dưới đây
Bộ sưu tập mẫu "nhân viên"
{
"_id" : 2,
"emp_id" : 1232,
"pinfo" : {
"empfname" : "Robart",
"emplname" : "Bolt"
},
"phno" : "123-123-1235",
"emale" : "[email protected]",
"offinfo" : [
"administration",
"MD"
]
}
}
Ví dụ về toán tử cập nhật trường - $rename
Nếu chúng ta muốn thay đổi tên trường offinfo thành service_details và emale thành email, có thể sử dụng câu lệnh mongodb sau
> db.employee.update[ { emp_id: 1232 }, { $rename: { 'offinfo': 'service_details', 'emale': 'email' } } ];
Để xem đầu ra được cập nhật -
> db.employee.find[].pretty[];
N. B. Phương thức find[] hiển thị các tài liệu ở định dạng không có cấu trúc nhưng để hiển thị kết quả theo cách được định dạng, có thể sử dụng phương thức pretty[]
Đầu ra của lệnh
{ "_id" : 2, "email" : "[email protected]", "emp_id" : 1232, "phno" : "123-123-1235", "pinfo" : { "empfname" : "Robart", "emplname" : "Bolt" }, "service_details" : [ "administration", "MD" ] }
Ví dụ về $rename để đổi tên tài liệu phụ
Nếu chúng tôi muốn đổi tên pinfo tài liệu phụ, có thể sử dụng các truy vấn mongodb sau -
> db.employee.update[ { emp_id: 1232 }, { $rename: { 'pinfo': 'personal'} } ];
Để xem đầu ra được cập nhật -
> db.employee.find[].pretty[];
N. B. Phương thức find[] hiển thị các tài liệu ở định dạng không có cấu trúc nhưng để hiển thị kết quả theo cách được định dạng, có thể sử dụng phương thức pretty[]
Đầu ra của lệnh
________số 8_______Ví dụ về toán tử $rename để đổi tên trường trong tài liệu con
Nếu chúng ta muốn đổi tên trường empfname bằng fname trong tài liệu con cá nhân, có thể sử dụng lệnh mongodb sau -
> db.employee.update[ { emp_id: 1232 }, { $rename: { "personal.empfname": "personal.fname"} } ];
Ở đây trong ví dụ trên, để đổi tên trường empfname trong tài liệu phụ personal, toán tử $rename đã được sử dụng với ký hiệu dấu chấm để đảm bảo trường vẫn còn trong tài liệu phụ
Để xem đầu ra được cập nhật -
> db.employee.find[].pretty[];
N. B. Phương thức find[] hiển thị các tài liệu ở định dạng không có cấu trúc nhưng để hiển thị kết quả theo cách được định dạng, có thể sử dụng phương thức pretty[]
Đầu ra của lệnh
{
"_id" : 2,
"emp_id" : 1232,
"pinfo" : {
"empfname" : "Robart",
"emplname" : "Bolt"
},
"phno" : "123-123-1235",
"emale" : "[email protected]",
"offinfo" : [
"administration",
"MD"
]
}
}
0Ví dụ về toán tử $rename để đổi tên trường và di chuyển nó sang tài liệu con khác
Nếu chúng tôi muốn đổi tên trường emplname thành last_name của tài liệu phụ cá nhân và di chuyển nó từ tài liệu phụ cá nhân, có thể sử dụng lệnh mongodb sau đây -
{
"_id" : 2,
"emp_id" : 1232,
"pinfo" : {
"empfname" : "Robart",
"emplname" : "Bolt"
},
"phno" : "123-123-1235",
"emale" : "[email protected]",
"offinfo" : [
"administration",
"MD"
]
}
}
1Ở đây trong ví dụ trên, để đổi tên trường emplname trong tài liệu con cá nhân, toán tử $rename đã được sử dụng với ký hiệu dấu chấm để đảm bảo trường vẫn còn trong tài liệu con và thao tác này đổi tên trường tài liệu con emplname thành
Nếu không có tên tài liệu phụ nào được bao gồm trong tên trường mới, thì trường đó sẽ trở thành trường tài liệu thông thường
Để xem đầu ra được cập nhật -
> db.employee.find[].pretty[];
N. B. Phương thức find[] hiển thị các tài liệu ở định dạng không có cấu trúc nhưng để hiển thị kết quả theo cách được định dạng, có thể sử dụng phương thức pretty[]
Đầu ra của lệnh
{
"_id" : 2,
"emp_id" : 1232,
"pinfo" : {
"empfname" : "Robart",
"emplname" : "Bolt"
},
"phno" : "123-123-1235",
"emale" : "[email protected]",
"offinfo" : [
"administration",
"MD"
]
}
}
3Thí dụ
Tại thời điểm đổi tên trường, Nếu trường không tồn tại trong tài liệu, thao tác đổi tên sẽ không thực hiện được
Đây là ví dụ -
{
"_id" : 2,
"emp_id" : 1232,
"pinfo" : {
"empfname" : "Robart",
"emplname" : "Bolt"
},
"phno" : "123-123-1235",
"emale" : "[email protected]",
"offinfo" : [
"administration",
"MD"
]
}
}
4Ở đây trong ví dụ trên, chúng tôi muốn đổi tên trường thành phố thành thị trấn, nhưng trường thành phố không tồn tại trong tài liệu, vì vậy thao tác này sẽ không thực hiện được. Như vậy, nếu chúng ta muốn đổi tên nhiều trường và nếu tất cả các trường đó không tồn tại trong tài liệu thì thao tác sẽ không thực hiện được