Springboot:如何在MongoDB中执行复杂的查询,例如获取对象的属性列表,而不是Mongo DB中的整个对象

时间:2018-12-19 09:02:02

标签: spring-boot spring-data-mongodb

我有一个Springboot应用程序,该应用程序包含2个实体,即用户和好友请求。用户实体看起来像这样:

   public class User{

    @Id
    private BigInteger id;

    private String firstName;

    private String lastName;

    private String email;

    private String password;

}

而FriendRequest对象看起来像这样:

    public class FriendRequest{

    @Id
    private BigInteger id;

    private User sender;

    private FriendRequestStatus friendRequestStatus;

    private User recipient;
}

朋友请求类具有4个属性:

  • ID

  • 请求的发送者是用户

  • 请求的接收者,也是用户

  • friendRequestStatus-可以是“待处理”(如果请求未被接受),“已接受”(如果朋友请求已被接受)或“已拒绝”(如果请求被拒绝)。

    < / li>

我想使用FriendRequest表来获取特定用户的所有朋友,而不是我创建一个Friends表-它通过获取特定用户是发送者或接收者并且acceptedRequest被接受的所有朋友请求来工作。然后,如果收件人是您正在寻找朋友的用户,则进一步选择发件人作为朋友,如果收件人是您正在寻找朋友的用户,则选择收件人。最后,我想获得一个列表。

我的问题是我不知道如何在MongoDB中实现springboot,当使用Postgre时,这是我运行的查询,并且运行良好:

@Query(value = "SELECT * \n" +
        "FROM ( \n" +
        "SELECT DISTINCT CASE sender WHEN 1 THEN recipient ELSE sender END AS friend_id \n" +
        "FROM friendrequest WHERE 1 IN (recipient, sender) \n" +
        "AND friendrequeststatus = 'ACCEPTED' \n" +
        ") f \n" +
        "LEFT JOIN users u\n" +
        "ON f.friend_id = u.id\n" +
        "ORDER BY friend_id \n-- #pageable\n"
        ,nativeQuery = true)
Page<User> getFriends(Pageable pageable);

但是如何在MongoDB for Springboot中复制它是一个大问题

0 个答案:

没有答案