Để chỉ hiển thị _id và ẩn các trường khác, sử dụng projection với giá trị 0 cho trường cần ẩn.
Tạo collection dữ liệu
> db.demo650.insertOne({_id:101, details:{Name:"Chris", Age:21}});
> db.demo650.insertOne({_id:102, details:{Name:"Bob", Age:22}});
> db.demo650.insertOne({_id:103, details:{Name:"Sam", Age:20}});
> db.demo650.insertOne({_id:104, details:{Name:"Robert", Age:24}});
Hiển thị đầy đủ
> db.demo650.find();
Kết quả:
{
_id:101, details:{Name:"Chris", Age:21}
}, {
_id:102, details:{Name:"Bob", Age:22}
}, {
_id:103, details:{Name:"Sam", Age:20}
}, {
_id:104, details:{Name:"Robert", Age:24}
}
Projection ẩn trường details
> db.demo650.find({}, {details: 0});
Kết quả (chỉ còn _id):
{ "_id" : 101 } { "_id" : 102 } { "_id" : 103 } { "_id" : 104 }
Giải thích projection:
- Tham số 2 của
find(query, projection) {details: 0}: Ẩn trườngdetails(0 = exclude)_idluôn hiển thị trừ khi explicitly{_id: 0}- Không thể mix include (1) và exclude (0) trừ _id
Các ví dụ projection:
// Chỉ lấy Name, ẩn Age
db.demo650.find({}, {"details.Name": 1, "details.Age": 0, _id: 0})
// Lấy tất cả trừ Age
db.demo650.find({}, {"details.Age": 0})
// Chỉ lấy _id và Name
db.demo650.find({}, {"details.Name": 1, _id: 1})
Projection giúp giảm băng thông mạng và bộ nhớ khi chỉ cần một số trường.