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

Loại bỏ _id trong MongoDB Aggregation mà không cần include các trường khác

Trong MongoDB Aggregation Framework, để loại bỏ trường _id khỏi kết quả mà không cần liệt kê tất cả các trường khác, sử dụng stage $project với _id: 0. Đây là cách đơn giản nhất để "exclude _id only".

Tạo dữ liệu mẫu

> db.excludeIdDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701a56d78f205348bc632") }
> db.excludeIdDemo.insertOne({"StudentFirstName":"Robert","StudentAge":20});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701af6d78f205348bc633") }
> db.excludeIdDemo.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd701b86d78f205348bc634") }

Xem dữ liệu

> db.excludeIdDemo.find();

Loại bỏ _id trong Aggregation

> db.excludeIdDemo.aggregate( 
  { 
    $project : { 
      _id : 0, 
      "StudentFirstName": 1 
    } 
  } 
);

Kết quả


Giải thích

  • $project: Stage định hình đầu ra
  • _id: 0: Loại bỏ trường _id (0 = exclude, 1 = include)
  • "StudentFirstName": 1: Chỉ bao gồm trường này
  • Kết quả: Chỉ có StudentFirstName, không có _id, không có StudentAge

Giữ tất cả trường khác, chỉ bỏ _id

Nếu muốn giữ tất cả trường khác mà chỉ bỏ _id, vẫn phải liệt kê chúng hoặc dùng cách sau (MongoDB 4.4+):


Trong find() thông thường (không phải aggregation)

 trong $project4.4+Loại bỏ _id, giữ tất cả trường khác
    {$unset: "_id"}4.2+Stage riêng để loại bỏ trường
  


Lưu ý

  • Trong find(), _id được include mặc định (1), phải explicit set 0 để exclude
  • Trong $project, _id cũng mặc định 1 trừ khi set 0
  • Không thể exclude _id và include tất cả trường khác trong một cú pháp ngắn gọn trước MongoDB 4.4