加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Spring Data MongoDB存储库的查询方法中使用投影类型?

发布时间:2020-12-15 01:44:35 所属栏目:大数据 来源:网络整理
导读:我一直在使用Spring Data和MongoDB,并且有一个关于限制某些查询的数据量的问题.我已经看到在MongoRepository中添加自定义查询,但是我没有看到任何限制数据量和返回基本上是较大类的子集的类的示例. 例如,我有一个包含多个字段的User类,但我还想创建一个UserS

我一直在使用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中提供.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读