Trong MongoDB Aggregation Framework, để loại bỏ trường _id khỏi kết quả mà không cần liệt kê tất cả các trường khác, sử dụng stage $project với _id: 0. Đây là cách đơn giản nhất để "exclude _id only".
Tạo dữ liệu mẫu
> db.excludeIdDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701a56d78f205348bc632") }
> db.excludeIdDemo.insertOne({"StudentFirstName":"Robert","StudentAge":20});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701af6d78f205348bc633") }
> db.excludeIdDemo.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701b86d78f205348bc634") }
Xem dữ liệu
> db.excludeIdDemo.find();
Loại bỏ _id trong Aggregation
> db.excludeIdDemo.aggregate( { $project : { _id : 0, "StudentFirstName": 1 } } );Kết quả
Giải thích
$project: Stage định hình đầu ra_id: 0: Loại bỏ trường _id (0 = exclude, 1 = include)"StudentFirstName": 1: Chỉ bao gồm trường này- Kết quả: Chỉ có StudentFirstName, không có _id, không có StudentAge
Giữ tất cả trường khác, chỉ bỏ _id
Nếu muốn giữ tất cả trường khác mà chỉ bỏ _id, vẫn phải liệt kê chúng hoặc dùng cách sau (MongoDB 4.4+):
Trong find() thông thường (không phải aggregation)
trong $project4.4+ Loại bỏ _id, giữ tất cả trường khác {$unset: "_id"}4.2+ Stage riêng để loại bỏ trường Lưu ý
- Trong
find(), _id được include mặc định (1), phải explicit set 0 để exclude - Trong
$project, _id cũng mặc định 1 trừ khi set 0 - Không thể exclude _id và include tất cả trường khác trong một cú pháp ngắn gọn trước MongoDB 4.4