Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

排除 _id 在 MongoDB Aggregation 不包含其他字段

文章演示了如何在 MongoDB Aggregation Framework 中使用 $project 排除 _id 字段,同时仅包含特定字段(如 StudentFirstName)。

创建示例数据

> 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") }

显示所有文档

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

使用 Aggregation $project 排除 _id 仅包含 StudentFirstName

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

结果

{ "StudentFirstName" : "John" }
{ "StudentFirstName" : "Robert" }
{ "StudentFirstName" : "Chris" }

关键点说明

  • _id: 0 - 明确排除 _id 字段(默认包含)
  • "StudentFirstName": 1 - 包含 StudentFirstName 字段
  • 在 $project 中,除了 _id 默认包含外,其他字段必须显式指定 1 才会包含
  • 不能在同一个 $project 中混合使用 0 和 1(_id 除外)

对比:find() 的 Projection

// find() 也可以排除 _id
db.excludeIdDemo.find({}, { _id: 0, StudentFirstName: 1 });

// 结果相同但 find() 返回 Cursor,aggregate() 返回 Aggregation Cursor

进阶:动态排除字段

// 如果字段名在变量中
var excludeField = "_id";
var includeField = "StudentFirstName";
var projectSpec = {};
projectSpec[excludeField] = 0;
projectSpec[includeField] = 1;
db.excludeIdDemo.aggregate([{ $project: projectSpec }]);