我一直在使用Spring Data和MongoDB,并且有一个关于限制某些查询的数据量的问题.我已经看到在MongoRepository中添加自定义查询,但是我没有看到任何限制数据量和返回基本上是较大类的子集的类的示例.
例如,我有一个包含多个字段的User类,但我还想创建一个UserShort类,该类包含User类中的字段子集.例如,UserShort只包含id和firstName / lastName / email字段,而不是所有内容.
我已经看到我可以指定/限制返回的字段,但是我可以让那些返回到不同的类吗?除非我指定User类,否则UserShort将返回null,但字段将限制为我指定的字段.不确定这是否可行?我意识到下面的User类并不大,但它是我追求的概念.
用户界面:
public interface Users {}
子集类:
public class UserShort implements Users {
@Id
private String id;
private String firstName;
private String lastName;
@Indexed(unique = true)
private String email;
//getters / setters
}
全班:
@Document
public class User implements Users {
@Id
private String id;
private String firstName;
private String lastName;
private String username;
private String password;
private Date dob;
private Status status;
@Indexed(unique = true)
private String email;
private Gender gender;
private String locale;
private Date registerDate;
@DBRef
private List
和存储库接口:
public interface UserRepository extends MongoRepository
最佳答案
只要查询方法的返回类型可分配给托管域类型(在您的情况下为Users),我们将更喜欢返回类型来确定要运行查询的集合.因此,在您的情况下,我们将针对userShort而不是用户执行查询,这就是您没有获得任何结果的原因.该行为适用于支持将继承层次结构存储到不同的集合中.
如果您切换到用户作为存储库的域类型,事情应该完全按预期工作.这还有一个好处,就是可以防止客户端将UserShort实例交给save(…)方法,该方法将清除User中包含但不包含在UserShort中的属性.这是最终的存储库接口声明.
interface UserRepository extends MongoRepository
P.S.:@ byte-crunch在评论中概述,这当前仅适用于预测集合,但不适用于返回单个实例.这已在DATAMONGO-1030报告并修复,将在1.5.4和1.6.0 GA中提供.