Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB tương đương SELECT field AS alias (đổi tên trường)

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

SQLMongoDB (Aggregation)
SELECT name AS full_name FROM usersdb.users.aggregate([{ $project: { _id: 0, full_name: "$name" } }])
SELECT name, UPPER(name) AS upper_name FROM usersdb.users.aggregate([{ $project: { _id: 0, name: 1, upper_name: { $toUpper: "$name" } } }])

Lưu ý

  • $project tạ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 $project trong find() - 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ợ)