首页 > 解决方案 > 如何在 Spring Data MongoDB 的数据投影中包含许多字段

问题描述

我们目前使用如下语法限制在某些但不是全部(基于权限)MongoDB 查询下返回的字段:

import org.springframework.data.mongodb.core.query.Query;

Query query = new Query();
query.fields()
          .include("field1")
          .include("field2")
          .include("field3")
          .include("field4");

不幸的是,我们有很多领域,想知道是否有更好的方法来解决这个问题?查询对象最终被传递给一个 mongoTemplate 实例以针对数据库执行。

标签: mongodbspring-bootspring-dataspring-data-mongodb

解决方案


我认为您可以通过投影阶段,因为如果您创建所需对象的 POJO(在投影之后),它将自动发生……
例如,我们有一个名为 Petrucci 的类:

@Data //<--- I highly recommand to use lombok
@JsonIgnoreProperties
public class Petrucci {
 int f1;
 int f2;
 int f3;
}

然后当你运行:

Petrucci john = mongoTemplate.findOne(
  Query.query(Criteria.where("f1").is("majesty")), Petrucci.class);

投影将自动发生,只剩下 Petrucci 类的字段。


推荐阅读