如何使用Springs MongoTemplate和Criteria类检索字段子集

时间:2012-05-01 10:39:27

标签: spring mongodb spring-mongo

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

控制台命令

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

MongoTemplate

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

如果您有兴趣,可以在此处找到有关子集查询的信息 http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

有什么想法吗?

干杯

4 个答案:

答案 0 :(得分:45)

Query q = new Query();
q.fields().include("name");
mongoTemplate.find(q, Person.class);

答案 1 :(得分:2)

mongoTemplate.getCollection(COLLECTION).find(null, new BasicDBObject(FIELD, "1"))

答案 2 :(得分:1)

您可以使用:

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

答案 3 :(得分:0)

如果目标是仅使用字段子集填充标准域对象,则使用 another answer 中所述的 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 查询中指定集合名称。< /p>

投影类

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");