Mặc định MongoDB luôn trả về trường _id trong aggregation. Để ẩn nó, sử dụng stage $project với _id: 0.
Cú pháp
db.collection.aggregate([
{ $project: { _id: 0, "trườngCầnLấy": 1, "trườngKhác": 1 } }
]).pretty();
Ví dụ minh họa
Tạo collection hideidDemo:
> db.hideidDemo.insertOne({ "UserName": "Larry", "UserAge": 23, "UserCountryName": "US" });
> db.hideidDemo.insertOne({ "UserName": "Chris", "UserAge": 21, "UserCountryName": "AUS" });
> db.hideidDemo.insertOne({ "UserName": "Robert", "UserAge": 26, "UserCountryName": "UK" });
Hiển thị tất cả (có _id):
> db.hideidDemo.find().pretty();
Kết quả:
{ "_id" : ObjectId("..."), "UserName" : "Larry", "UserAge" : 23, "UserCountryName" : "US" }
{ "_id" : ObjectId("..."), "UserName" : "Chris", "UserAge" : 21, "UserCountryName" : "AUS" }
{ "_id" : ObjectId("..."), "UserName" : "Robert", "UserAge" : 26, "UserCountryName" : "UK" }
Aggregation ẩn _id, chỉ lấy UserName và UserCountryName
> db.hideidDemo.aggregate([
{ $project: { _id: 0, UserName: 1, UserCountryName: 1 } }
]).pretty();
Kết quả:
{ "UserName" : "Larry", "UserCountryName" : "US" }
{ "UserName" : "Chris", "UserCountryName" : "AUS" }
{ "UserName" : "Robert", "UserCountryName" : "UK" }
Lưu ý quan trọng
_id: 0chỉ ẩn _id, không xóa nó khỏi database.- Nếu không chỉ định field nào khác, pipeline sẽ trả về document rỗng
{ }. - Trong
$group,_idlà **bắt buộc** (là khóa nhóm). Muốn ẩn sau khi group, dùng thêm stage$projecthoặc$addFields+$project.
Ví dụ: Group rồi ẩn _id
db.orders.aggregate([
{ $group: { _id: "$status", count: { $sum: 1 } } },
{ $project: { _id: 0, status: "$_id", count: 1 } } // Đổi tên _id -> status, ẩn _id
]);
Kết quả: { "status" : "A", "count" : 10 } thay vì { "_id" : "A", "count" : 10 }.
Trong find() thông thường
db.collection.find({}, { _id: 0, UserName: 1 }); // projection tham số thứ 2