byt*_*nch 7 java spring mongodb spring-data-mongodb
我一直在使用Spring Data和MongoDB,并且有一个关于限制某些查询的数据量的问题.我已经看到在其中添加自定义查询MongoRepository,但是我没有看到任何限制数据量和返回基本上是较大类的子集的类的示例.
例如,我有一个User具有多个字段的类,但我还想创建一个具有UserShort该类字段子集的User类.例如UserShort,只包含id和firstName/ lastName/ email字段,而不是一切.
我已经看到我可以指定/限制返回的字段,但是我可以让那些返回到不同的类吗?此刻UserShort将返回null,除非我指定的User类,而不是,但字段将被限制到我指定的人.不确定这是否可行?我意识到User下面的课程不是很大,但这是我追求的概念.
用户界面:
public interface Users {}
Run Code Online (Sandbox Code Playgroud)
子集类:
public class UserShort implements Users {
@Id
private String id;
private String firstName;
private String lastName;
@Indexed(unique = true)
private String email;
//getters / setters
}
Run Code Online (Sandbox Code Playgroud)
全班:
@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<UserAddress> addresses;
public User(){
addresses = new ArrayList<UserAddress>();
}
//getters / setters
}
Run Code Online (Sandbox Code Playgroud)
和存储库接口:
public interface UserRepository extends MongoRepository<Users, String> {
public User findByEmail(String email);
@Query(value="{ 'email' : ?0 }", fields="{ 'firstName' : 1, 'lastName' : 1}")
public UserShort findUserShortByEmail(String email);
}
Run Code Online (Sandbox Code Playgroud)
只要查询方法的返回类型可分配给托管域类型(Users在您的情况下),我们将首选返回类型来确定要对之运行查询的集合。因此,在您的情况下,我们将针对该查询执行查询,userShort而不是users为什么您没有得到任何结果的原因。可以使用该行为来支持将继承层次结构存储到不同的集合中。
如果您切换User为存储库的域类型,那么事情应该完全按预期进行。这还具有防止客户端将UserShort实例交给该save(…)方法的好处,该方法将擦除包含User但不包含在中的属性UserShort。这是最终的存储库接口声明。
interface UserRepository extends MongoRepository<User, String> {
User findByEmail(String email);
@Query(value="{ 'email' : ?0 }", fields="{ 'firstName' : 1, 'lastName' : 1}")
UserShort findUserShortByEmail(String email);
}
Run Code Online (Sandbox Code Playgroud)
PS:@ byte-crunch在评论中概述,该命令当前仅适用于投影集合,不适用于返回单个实例。已在DATAMONGO-1030中对此问题进行了报告和修复,并将在1.5.4和1.6.0 GA中提供。
| 归档时间: |
|
| 查看次数: |
4598 次 |
| 最近记录: |