指定要返回的字段
Overview
在本指南中,您可以了解如何使用投影指定从读取操作中返回哪些字段。 投影是指定 MongoDB 从查询中返回哪些字段的文档。
样本数据
本指南中的示例使用 Atlas示例数据集中的 sample_restaurants.restaurants
集合。 要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅快速入门。
投影类型
您可以使用投影来指定要在返回文档中包含哪些字段,或指定要排除哪些字段。
在指定要包含在投影中的某些字段时,会隐式排除所有其他字段(默认包含的_id
字段除外)。 除非要排除_id
字段,否则不能在单个投影中组合包含和排除语句。
要从返回的文档删除_id
字段,您必须明确将其排除。
指定要包含的字段
要指定结果中包含的字段,请将 Project()
方法链接到 Find()
方法。调用 Project()
方法时,您必须将投影定义作为参数传入。您可以通过使用 Builders<T>.Projection.Include()
方法并将要包含的字段名称作为参数传入来构造投影定义。可以链接此方法以在投影中包含多个字段。
以下示例使用 Find()
方法查找 name
字段值为 "Emerald Pub"
的所有餐厅。然后,代码调用 Project()
方法,指示查找操作在结果中包含 name
和 cuisine
字段:
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Include("name") .Include("cuisine"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
{ "_id" : ObjectId("..."), "cuisine" : "American", "name" : "Emerald Pub" } { "_id" : ObjectId("..."), "cuisine" : "American", "name" : "Emerald Pub" }
排除_id
字段
在指定要包含的字段时,您还可以从返回的文档中排除_id
字段。
以下示例运行与上一示例相同的查询,但从投影中排除_id
字段:
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Include("name") .Include("cuisine") .Exclude("_id"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
{ "cuisine" : "American", "name" : "Emerald Pub" } { "cuisine" : "American", "name" : "Emerald Pub" }
指定要排除的字段
要指定要从结果中排除的字段,请将 Project()
方法链接到 Find()
方法。您可以使用 Builders<T>.Projection.Exclude()
方法并传入要排除的字段名称作为参数,以排除投影中的字段。可以链接此方法以排除投影中的多个字段。
以下示例使用 Find()
方法查找 name
字段值为 "Emerald Pub"
的所有餐厅。然后,它使用投影从返回的文档中排除 cuisine
字段:
var filter = Builders<BsonDocument>.Filter.Eq("name", "Emerald Pub"); var projection = Builders<BsonDocument>.Projection .Exclude("cuisine"); var results = collection.Find(filter).Project(projection).ToList(); foreach (var result in results) { Console.WriteLine(result.ToJson()); }
{ "_id" : ObjectId("..."), "address" : { "building" : "308", "coord" : [-74.008493599999994, 40.725807199999998], "street" : "Spring Street", "zipcode" : "10013" }, "borough" : "Manhattan", "grades" : [{ "date" : ISODate("2014-02-24T00:00:00Z"), "grade" : "A", "score" : 5 }, { "date" : ISODate("2013-08-26T00:00:00Z"), "grade" : "A", "score" : 13 }, { "date" : ISODate("2013-03-04T00:00:00Z"), "grade" : "A", "score" : 12 }, { "date" : ISODate("2012-06-25T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-12-23T00:00:00Z"), "grade" : "A", "score" : 10 }, { "date" : ISODate("2011-07-26T00:00:00Z"), "grade" : "C", "score" : 32 }], "name" : "Emerald Pub", "restaurant_id" : "40367329" } { "_id" : ObjectId("..."), "address" : { "building" : "18301", "coord" : [-73.791184999999999, 40.740119999999997], "street" : "Horace Harding Expressway", "zipcode" : "11365" }, "borough" : "Queens", "grades" : [{ "date" : ISODate("2014-05-07T00:00:00Z"), "grade" : "A", "score" : 12 }, { "date" : ISODate("2013-04-30T00:00:00Z"), "grade" : "A", "score" : 9 }, { "date" : ISODate("2012-03-01T00:00:00Z"), "grade" : "A", "score" : 13 }], "name" : "Emerald Pub", "restaurant_id" : "40668598" }
更多信息
要学习;了解有关投影的更多信息,请参阅MongoDB Server手册中的“项目字段”指南。
API 文档
要学习;了解有关本指南中讨论的任何函数或类型的更多信息,请参阅以下API文档: