Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

MongoDB find() có thể ẩn _id không?

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