我刚刚开始使用 Spring Data MongoDB,从文档来看它看起来非常好。我对默认查询实现有疑问,所以我会知道是否需要编写自己的实现。
假设我有很多
Person
文档,其中包含大量信息——不仅是人的“姓名”,而且可能还有数兆字节的信息,例如购买历史记录、旅行日期、数学作业等等。 (具体信息无关紧要,就说是很多额外的字段。)但有时我只想查询Person.name
.的列表
看来Spring Data MongoDB允许我在查询时选择特定字段,这当然是标准的MongoDB字段投影。但是,如果我只是使用
MongoTemplate
或 MongoDB 存储库 进行标准查询,Spring Data MongoDB 会自动对 MongoDB 进行字段投影以仅查询构造对象所需的字段吗?还是做一个通用的查询,返回数据后才判断哪些字段有用?
例如,假设我有一个这样的 DTO Java 记录:
record PersonListItem(String name) {}
如果我有一个
PersonListItemRepository extends CrudRepository<PersonListItem, String>
并调用findAll()
,Spring Data MongoDB会默认查询文档和所有它们的字段,还是会主动看到它只需要name
并在查询中包含该字段投影, 这样 MongoDB 只会发回构造PersonListItem
所需的信息?如果我使用MongoTemplate
呢?他们中的任何一个都主动投射领域吗?或者,如果我想基于文档字段的子集进行高效查询和数据传输,是否需要手动编写此类查询?