【发布时间】:2021-01-16 19:03:33
【问题描述】:
我有一个 Spring Boot 应用程序设置来使用 Mongo 数据 Pojo。我有以下依赖项(我已经排除了杰克逊,而是使用 Gson)-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- Exclude the default Jackson dependency -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
</exclusions>
</dependency>
我有 2 个类,都指的是同一个集合。唯一的区别是 ModuleB 缺少一些字段 -
@Document("Module")
class ModuleA extends MongoModel{
int X = 0;
String Y = "something";
}
@Document("Module")
class ModuleB extends MongoModel{
String Y = "something";
}
我正在使用 MongoTemplate 来获取数据 -
protected final MongoTemplate template;
@Override
public MongoModel get(Class<? extends MongoModel> cls, Query query) {
query.addCriteria(Criteria.where("deleted").is(0));
return template.findOne(query, cls);
}
现在,当我使用 spring 存储库获取 ModuleA 或 ModuleB 的实例/文档时,spring-boot 执行的选择操作是否会存在性能差异(或查询差异)?还是 spring-boot 无论如何都获取了这两种情况下的所有字段,然后用必需的字段填充对象。
上面的例子可能看起来微不足道,但如果我有很多字段或 DBRef 到模块内的另一个文档,我可以在获取数据子集而不是获取整个文档时节省大量处理。
【问题讨论】:
-
您使用 投影 来检索文档中的字段(或数据)子集(请参阅 db.collection.find 中的投影)。见Projections in Spring Data MongoDB。
-
感谢@prasad_ 说得通。
标签: java mongodb spring-boot