繁体   English   中英

如何使用 Spring 的 MongoTemplate 和 Query 类检索字段子集?

[英]How do I retrieve a subset of fields using Spring's MongoTemplate and Query classes?

我希望能够执行以下控制台命令以返回仅填充了一部分字段但使用 Spring 的MongoTemplate类的所有行:

控制台命令

db.person.find(null,{name:1})

蒙戈模板

mongoTemplate.find(new Query(...), Person.class)

有关投影(子集)查询的信息可以在 MongoDB 手册中找到。

Query q = new Query();
q.fields().include("name");
mongoTemplate.find(q, Person.class);
mongoTemplate.getCollection(COLLECTION).find(null, new BasicDBObject(FIELD, "1"))

您可以使用:

mongoTemplate.findDistinct(String field, Class<?> entityClass, Class<T> resultClass);

如果目标是仅使用字段子集填充标准域对象,则使用d.fields().include()另一个答案中所述是d.fields().include()的方法。 然而,很多时候我发现拥有完整的对象是不可取的(拥有部分填充的对象很容易误导未来的开发人员阅读代码),我宁愿拥有一个只包含我正在检索的字段子集的对象。 在这种情况下,创建和检索仅包含字段子集的投影对象效果很好。

投影类

@Document("person") // Must be the same collection name used by Person
public class PersonNameOnly {
  private String name;

  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
}

MongoTemplate查询

mongoTemplate.find(new Query(...), PersonNameOnly.class);

如果要对多个类型使用相同的投影对象,可以省略投影对象中带有集合名称的@Document声明,并在MongoTemplate查询中指定集合名称。

投影类

public class NameOnly {
  private String name;

  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
}

MongoTemplate查询

mongoTemplate.find(new Query(...), NameOnly.class, "person");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM