文档菜单
文档首页
/ / /
Kotlin 同步驱动程序
/

指定返回字段

本页内容

  • 概述
  • 示例数据
  • 投影类型
  • 指定要包含的字段
  • 排除以下字段_id 字段
  • 附加信息
  • API 文档

在本指南中,您可以学习如何通过使用 投影 来指定从读取操作中返回哪些字段。投影是一个文档,指定了MongoDB从查询中返回哪些字段。

本指南中的示例使用restaurants 集合,该集合位于 sample_restaurants 数据库中,该数据库来自Atlas 示例数据集。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅 Atlas 入门 指南。

此集合中的文档由以下 Kotlin 数据类建模

data class Restaurant(
@BsonId
val id: ObjectId? = null,
val name: String,
val borough: String,
val cuisine: String
)

您可以使用投影来指定返回文档中包含哪些字段,或指定要排除哪些字段。

当指定投影中包含的特定字段时,所有其他字段都隐式排除(除了默认包含的 _id 字段)。除非您正在排除 _id 字段,否则不能在单个投影中组合包含和排除语句。

要从返回的文档中移除 _id 字段,必须 显式排除它。

使用以下语法指定要包含在结果中的字段

val projection = Projection.fields(
Projections.include(<fieldName1>, <fieldName2>, ...)
)

以下示例使用 find() 方法查找所有名称字段值为 "Emerald Pub" 的餐厅。然后它使用投影只返回返回文档的 namecuisineborough 字段。

val projection = Projections.fields(
Projections.include(
Restaurant::name.name,
Restaurant::cuisine.name,
Restaurant::borough.name
)
)
val results = collection
.find(eq(Restaurant::name.name, "Emerald Pub"))
.projection(projection)
results.forEach { result ->
println(result)
}
Restaurant(id=5eb3d668b31de5d588f429e2, name=Emerald Pub, borough=Manhattan, cuisine=American)
Restaurant(id=5eb3d668b31de5d588f432dd, name=Emerald Pub, borough=Queens, cuisine=American)

在指定要包含的字段时,也可以从返回的文档中排除 _id 字段。

以下示例运行与上一个示例相同的查询,但排除了投影中的 _id 字段。

val projection = Projections.fields(
Projections.excludeId(),
Projections.include(
Restaurant::name.name,
Restaurant::cuisine.name,
Restaurant::borough.name
)
)
val results = collection
.find(eq(Restaurant::name.name, "Emerald Pub"))
.projection(projection)
results.forEach { result ->
println(result)
}
Restaurant(id=null, name=Emerald Pub, borough=Manhattan, cuisine=American)
Restaurant(id=null, name=Emerald Pub, borough=Queens, cuisine=American)

有关投影的更多信息,请参阅 MongoDB 服务器手册中的 投影字段指南

要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下 API 文档

返回

检索数据