Giới thiệu
Trong SQL, bạn dùng SELECT field AS alias để đổi tên cột. Trong MongoDB, bạn dùng aggregation pipeline với stage $project để đặt bí danh (alias) cho trường.
Cú pháp MongoDB
db.tenCollection.aggregate([
{
$project: {
_id: 0, // Ẩn _id
tenMoi: "$tenCu" // Đổi tên: tenMoi = giá trị của tenCu
}
}
]);
Ví dụ minh họa
1. Tạo collection
> db.doiTenTruong.insertOne({ "Ten": "Larry" });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d448827b86948e204ca91") }
> db.doiTenTruong.insertOne({ "Ten": "Robert" });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d449027b86948e204ca92") }
> db.doiTenTruong.insertOne({ "Ten": "Sam" });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d449527b86948e204ca93") }
> db.doiTenTruong.insertOne({ "Ten": "Mike" });
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d449927b86948e204ca94") }
2. Đổi tên trường "Ten" thành "TenSinhVien"
> db.doiTenTruong.aggregate([
{
$project: {
_id: 0,
TenSinhVien: "$Ten"
}
}
]);
3. Kết quả
{ "TenSinhVien" : "Larry" }
{ "TenSinhVien" : "Robert" }
{ "TenSinhVien" : "Sam" }
{ "TenSinhVien" : "Mike" }
Mở rộng: $project nâng cao
Giữ nguyên field cũ, thêm field mới
db.collection.aggregate([
{ $project: {
_id: 0,
Ten: 1, // Giữ field gốc
TenSinhVien: "$Ten" // Thêm alias
} }
]);
Kết hợp với biểu thức
db.collection.aggregate([
{ $project: {
_id: 0,
TenVietHoa: { $toUpper: "$Ten" },
DoDaiTen: { $strLenCP: "$Ten" },
TenVietThuong: { $toLower: "$Ten" }
} }
]);
Đổi tên field lồng nhau
db.collection.aggregate([
{ $project: {
_id: 0,
"ThongTin.TenDayDu": "$ThongTin.HoTen"
} }
]);
So sánh SQL vs MongoDB
| SQL | MongoDB (Aggregation) |
|---|---|
SELECT name AS full_name FROM users | db.users.aggregate([{ $project: { _id: 0, full_name: "$name" } }]) |
SELECT name, UPPER(name) AS upper_name FROM users | db.users.aggregate([{ $project: { _id: 0, name: 1, upper_name: { $toUpper: "$name" } } }]) |
Lưu ý
$projecttạo document mới, không sửa document gốc- Giá trị
1= include,0= exclude,"$field"= reference field khác - Không thể dùng
$projecttrongfind()- chỉ dùng trong aggregation - Trong find(), dùng projection:
db.coll.find({}, { tenMoi: "$tenCu" })KHÔNG hoạt động (chỉ aggregation mới hỗ trợ)