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

Cách loại bỏ primary key (_id) khỏi kết quả truy vấn MongoDB

Ẩn _id (primary key) trong kết quả find() với projection

Trong MongoDB, _id luôn được trả về trừ khi tắt rõ ràng bằng projection { _id: 0 }.

1. Dữ liệu mẫu

> db.demo471.insertOne({ ClientId: 101, ClientName: "Chris" });
> db.demo471.insertOne({ ClientId: 102, ClientName: "Bob" });
> db.demo471.insertOne({ ClientId: 103, ClientName: "David" });

2. Tìm kiếm bình thường (có _id)

> db.demo471.find();
{ "_id": ObjectId("5e805711b0f3fa88e2279077"), "ClientId": 101, "ClientName": "Chris" }
{ "_id": ObjectId("5e80571db0f3fa88e2279078"), "ClientId": 102, "ClientName": "Bob" }
{ "_id": ObjectId("5e805724b0f3fa88e2279079"), "ClientId": 103, "ClientName": "David" }

3. Loại bỏ _id và ClientId, chỉ lấy ClientName

> db.demo471.find({}, { _id: 0, ClientId: 0 });
// Hoặc chỉ định field muốn lấy (include):
// db.demo471.find({}, { _id: 0, ClientName: 1 });

4. Kết quả

{ "ClientName": "Chris" }
{ "ClientName": "Bob" }
{ "ClientName": "David" }

Quy tắc Projection (Include/Exclude)

Quy tắcVí dụKết quả
Chỉ include (1){ name: 1, age: 1 }Chỉ name, age + _id (mặc định)
Chỉ exclude (0){ _id: 0, password: 0 }Tất cả TRỪ _id, password
KHÔNG trộn lẫn{ name: 1, age: 0 }❌ LỖI (trừ _id được phép mix)
_id đặc biệt{ _id: 0, name: 1 }✅ Hợp lệ: exclude _id + include name

Lưu ý: "Xóa primary key" vs "Ẩn trong kết quả"

  • Ẩn trong kết quả (Projection): find({}, { _id: 0 }) - Document trong DB vẫn có _id
  • Xóa thật sự _id: KHÔNG THỂ. _id là bắt buộc, immutable, unique. Không thể unset.
  • Nếu muốn key tự nhiên: Dùng trường khác làm unique index, nhưng _id vẫn tồn tại

Ví dụ projection phức tạp

// Lấy tên, tuổi, ẩn _id
db.users.find({}, { _id: 0, name: 1, age: 1 });

// Lấy tất cả TRỪ password, secret, _id
db.users.find({}, { _id: 0, password: 0, secret: 0 });

// Slice mảng: lấy 5 phần tử đầu
db.posts.find({}, { _id: 0, comments: { $slice: 5 } });