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

Ẩn trường _id trong kết quả Aggregation MongoDB

Mặc định MongoDB luôn trả về trường _id trong aggregation. Để ẩn nó, sử dụng stage $project với _id: 0.

Cú pháp

db.collection.aggregate([
    { $project: { _id: 0, "trườngCầnLấy": 1, "trườngKhác": 1 } }
]).pretty();

Ví dụ minh họa

Tạo collection hideidDemo:

> db.hideidDemo.insertOne({ "UserName": "Larry", "UserAge": 23, "UserCountryName": "US" });
> db.hideidDemo.insertOne({ "UserName": "Chris", "UserAge": 21, "UserCountryName": "AUS" });
> db.hideidDemo.insertOne({ "UserName": "Robert", "UserAge": 26, "UserCountryName": "UK" });

Hiển thị tất cả (có _id):

> db.hideidDemo.find().pretty();

Kết quả:

{ "_id" : ObjectId("..."), "UserName" : "Larry", "UserAge" : 23, "UserCountryName" : "US" }
{ "_id" : ObjectId("..."), "UserName" : "Chris", "UserAge" : 21, "UserCountryName" : "AUS" }
{ "_id" : ObjectId("..."), "UserName" : "Robert", "UserAge" : 26, "UserCountryName" : "UK" }

Aggregation ẩn _id, chỉ lấy UserName và UserCountryName

> db.hideidDemo.aggregate([
    { $project: { _id: 0, UserName: 1, UserCountryName: 1 } }
]).pretty();

Kết quả:

{ "UserName" : "Larry", "UserCountryName" : "US" }
{ "UserName" : "Chris", "UserCountryName" : "AUS" }
{ "UserName" : "Robert", "UserCountryName" : "UK" }

Lưu ý quan trọng

  • _id: 0 chỉ ẩn _id, không xóa nó khỏi database.
  • Nếu không chỉ định field nào khác, pipeline sẽ trả về document rỗng { }.
  • Trong $group, _id là **bắt buộc** (là khóa nhóm). Muốn ẩn sau khi group, dùng thêm stage $project hoặc $addFields + $project.

Ví dụ: Group rồi ẩn _id

db.orders.aggregate([
    { $group: { _id: "$status", count: { $sum: 1 } } },
    { $project: { _id: 0, status: "$_id", count: 1 } }  // Đổi tên _id -> status, ẩn _id
]);

Kết quả: { "status" : "A", "count" : 10 } thay vì { "_id" : "A", "count" : 10 }.

Trong find() thông thường

db.collection.find({}, { _id: 0, UserName: 1 }); // projection tham số thứ 2