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

Cách ngăn MongoDB trả về _id khi tìm tài liệu

Giới thiệu

Mặc định MongoDB luôn trả về trường _id trong kết quả truy vấn. Để loại bỏ _id, bạn set _id: 0 trong projection (trường thứ 2 của find).

Cú pháp

db.collection.find({ filter }, { _id: 0, tenTruong1: 1, tenTruong2: 1 });

Ví dụ minh họa

1. Tạo document có nested array

> db.anIdDemo.insertOne({
    "TenSinhVien": "Chris",
    "ThongTinSinhVien": [
        { "TongDiem": 540, "QuocGia": "US" },
        { "TongDiem": 489, "QuocGia": "UK" }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca20a9c66324ffac2a7dc63") }

2. Query mặc định (có _id)

> db.anIdDemo.find().pretty();
{ "_id" : ObjectId("5ca20a9c66324ffac2a7dc63"), "TenSinhVien" : "Chris", "ThongTinSinhVien" : [ { "TongDiem" : 540, "QuocGia" : "US" }, { "TongDiem" : 489, "QuocGia" : "UK" } ] }

3. Ẩn _id, lấy 1 phần tử đầu của mảng ThongTinSinhVien

> db.anIdDemo.find(
    { _id: ObjectId("5ca20a9c66324ffac2a7dc63") },
    { ThongTinSinhVien: { $slice: [0, 1] }, _id: 0 }
).pretty();

4. Kết quả - Không có _id

{ "TenSinhVien" : "Chris", "ThongTinSinhVien" : [ { "TongDiem" : 540, "QuocGia" : "US" } ] }

Projection rules (Quy tắc projection)

Giá trịÝ nghĩa
1 hoặc trueInclude (bao gồm) trường này
0 hoặc falseExclude (loại trừ) trường này
Không thể mixKết hợp include và exclude (trừ _id)

Ví dụ projection các trường hợp

// Chỉ lấy TenSinhVien (ẩn _id)
db.collection.find({}, { _id: 0, TenSinhVien: 1 });

// Lấy tất cả TRỪ _id và matKhau
db.collection.find({}, { _id: 0, matKhau: 0 });

// Lấy nested field cụ thể
db.collection.find({}, { _id: 0, "ThongTinThem.QuocGia": 1 });

// Kết hợp $slice
db.collection.find({}, { _id: 0, tags: { $slice: 5 } });

Trong Aggregation

db.collection.aggregate([
    { $match: { ... } },
    { $project: { _id: 0, tenTruong: 1 } }
]);

Lưu ý

  • _id là trường **duy nhất** có thể exclude khi đang include các trường khác
  • Không thể: { _id: 0, name: 1, age: 0 } (mix include/exclude)
  • Driver trả về document không có _id field (khác với null)
  • Một số driver (như Node.js) có option projection: { _id: 0 }

Cảnh báo

Không xóa _id khỏi document gốc! Projection chỉ ảnh hưởng kết quả trả về. _id là bắt buộc cho mọi document trong MongoDB và không thể xóa.