Trong MongoDB, tương đương SELECT column1, column2 FROM table là dùng **Projection** trong find() (tham số thứ 2).
Cú pháp
db.collection.find(
{ }, // Điều kiện WHERE (rỗng = tất cả)
{ _id: 1, "column1": 1, "column2": 1 } // Projection: 1 = include
).pretty();
Ví dụ minh họa
Tạo collection equivalentForSelectColumn1Column2Demo:
> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "John", "CustomerAge": 26, "CustomerCountryName": "US" });
> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "David", "CustomerAge": 22, "CustomerCountryName": "AUS" });
> db.equivalentForSelectColumn1Column2Demo.insertOne({ "CustomerName": "Chris", "CustomerAge": 24, "CustomerCountryName": "UK" });
Hiển thị tất cả:
> db.equivalentForSelectColumn1Column2Demo.find().pretty();
Chỉ lấy CustomerName, CustomerAge (giữ _id)
> db.equivalentForSelectColumn1Column2Demo.find({}, { "CustomerName": 1, "CustomerAge": 1 }).pretty();
Kết quả:
{ "_id" : ..., "CustomerName" : "John", "CustomerAge" : 26 }
{ "_id" : ..., "CustomerName" : "David", "CustomerAge" : 22 }
{ "_id" : ..., "CustomerName" : "Chris", "CustomerAge" : 24 }
Chỉ lấy CustomerName, CustomerAge (ẨN _id)
> db.equivalentForSelectColumn1Column2Demo.find({}, { _id: 0, "CustomerName": 1, "CustomerAge": 1 }).pretty();
Kết quả:
{ "CustomerName" : "John", "CustomerAge" : 26 }
{ "CustomerName" : "David", "CustomerAge" : 22 }
{ "CustomerName" : "Chris", "CustomerAge" : 24 }
Quy tắc Projection
- Include mode (1): Chỉ định field cần lấy.
_idmặc định = 1 (phải tắt rõ ràng nếu không muốn). - Exclude mode (0): Chỉ định field **không** cần lấy. Không mix include/exclude (trừ _id).
- Sub-field:
{ "address.city": 1, _id: 0 }. - Array slice:
{ "tags": { $slice: 3 } }(lấy 3 phần tử đầu).
Trong Aggregation: $project
db.collection.aggregate([
{ $project: { _id: 0, CustomerName: 1, CustomerAge: 1 } }
]);
Lợi ích
- Giảm network transfer (chỉ gửi field cần thiết).
- Tăng tốc độ (đọc ít dữ liệu từ disk/memory).
- Bảo mật: Không lộ field nhạy cảm (password, token, PII...).