Giới thiệu
Mặc định MongoDB luôn trả về trường _id trong kết quả truy vấn. Để loại bỏ _id, bạn set _id: 0 trong projection (trường thứ 2 của find).
Cú pháp
db.collection.find({ filter }, { _id: 0, tenTruong1: 1, tenTruong2: 1 });
Ví dụ minh họa
1. Tạo document có nested array
> db.anIdDemo.insertOne({
"TenSinhVien": "Chris",
"ThongTinSinhVien": [
{ "TongDiem": 540, "QuocGia": "US" },
{ "TongDiem": 489, "QuocGia": "UK" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca20a9c66324ffac2a7dc63") }
2. Query mặc định (có _id)
> db.anIdDemo.find().pretty();
{ "_id" : ObjectId("5ca20a9c66324ffac2a7dc63"), "TenSinhVien" : "Chris", "ThongTinSinhVien" : [ { "TongDiem" : 540, "QuocGia" : "US" }, { "TongDiem" : 489, "QuocGia" : "UK" } ] }
3. Ẩn _id, lấy 1 phần tử đầu của mảng ThongTinSinhVien
> db.anIdDemo.find(
{ _id: ObjectId("5ca20a9c66324ffac2a7dc63") },
{ ThongTinSinhVien: { $slice: [0, 1] }, _id: 0 }
).pretty();
4. Kết quả - Không có _id
{ "TenSinhVien" : "Chris", "ThongTinSinhVien" : [ { "TongDiem" : 540, "QuocGia" : "US" } ] }
Projection rules (Quy tắc projection)
| Giá trị | Ý nghĩa |
|---|---|
1 hoặc true | Include (bao gồm) trường này |
0 hoặc false | Exclude (loại trừ) trường này |
| Không thể mix | Kết hợp include và exclude (trừ _id) |
Ví dụ projection các trường hợp
// Chỉ lấy TenSinhVien (ẩn _id)
db.collection.find({}, { _id: 0, TenSinhVien: 1 });
// Lấy tất cả TRỪ _id và matKhau
db.collection.find({}, { _id: 0, matKhau: 0 });
// Lấy nested field cụ thể
db.collection.find({}, { _id: 0, "ThongTinThem.QuocGia": 1 });
// Kết hợp $slice
db.collection.find({}, { _id: 0, tags: { $slice: 5 } });
Trong Aggregation
db.collection.aggregate([
{ $match: { ... } },
{ $project: { _id: 0, tenTruong: 1 } }
]);
Lưu ý
_idlà trường **duy nhất** có thể exclude khi đang include các trường khác- Không thể:
{ _id: 0, name: 1, age: 0 }(mix include/exclude) - Driver trả về document không có _id field (khác với null)
- Một số driver (như Node.js) có option
projection: { _id: 0 }
Cảnh báo
Không xóa _id khỏi document gốc! Projection chỉ ảnh hưởng kết quả trả về. _id là bắt buộc cho mọi document trong MongoDB và không thể xóa.