我希望能够执行以下控制台命令以返回仅填充了一部分字段但使用 SpringMongoTemplate
类的所有行:
控制台命令
db.person.find(null,{name:1})
Mongo模板
mongoTemplate.find(new Query(...), Person.class)
有关投影(子集)查询的信息可以在 MongoDB 手册中找到。
我希望能够执行以下控制台命令以返回仅填充了一部分字段但使用 SpringMongoTemplate
类的所有行:
控制台命令
db.person.find(null,{name:1})
Mongo模板
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"))
如果目标是仅使用字段的子集填充标准域对象,则使用另一个答案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");
您可以使用:
mongoTemplate.findDistinct(String field, Class<?> entityClass, Class<T> resultClass);