Có, MongoDB cho phép loại bỏ trường _id khỏi kết quả truy vấn find() bằng cách sử dụng projection (chiếu) với {_id: 0}. Đây là cách đơn giản để chỉ lấy các trường dữ liệu mong muốn.
Cú pháp
db.yourCollectionName.find({}, {_id: 0});
Tạo dữ liệu mẫu
> db.excludeIdDemo.insertOne({"CustomerName":"Larry"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7f62c1a844af18acdffb9") }
> db.excludeIdDemo.insertOne({"CustomerName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7f6311a844af18acdffba") }
> db.excludeIdDemo.insertOne({"CustomerName":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7f6351a844af18acdffbb") }
> db.excludeIdDemo.insertOne({"CustomerName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7f6381a844af18acdffbc") }
Xem dữ liệu (có _id)
> db.excludeIdDemo.find().pretty();
Truy vấn loại bỏ _id
> db.excludeIdDemo.find({}, {_id: 0});Kết quả
Giải thích
- Tham số thứ 2 của
find(query, projection)là projection {_id: 0}: Loại bỏ _id (0 = exclude)- Mặc định _id luôn được include (1) trừ khi explicit exclude
- Có thể kết hợp:
{_id: 0, CustomerName: 1, Age: 1}
Trong Aggregation Framework
Lưu ý quan trọng
- Không thể exclude _id và include tất cả trường khác bằng cú pháp ngắn gọn trước MongoDB 4.4
- Trong find():
{_id: 0}exclude _id, các trường khác mặc định include - Trong $project: Phải explicit include các trường muốn giữ (trừ MongoDB 4.4+ với $$REMOVE)
- Projection không làm thay đổi dữ liệu trong DB, chỉ ảnh hưởng kết quả trả về
Ví dụ kết hợp