Springboot: как выполнить сложные запросы в MongoDB, например, получить список свойств объекта, а не весь объект в базе данных Mongo - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть приложение 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 свойства:

  • Идентификатор

  • отправитель запроса, который является пользователем

  • получатель запроса, который также является пользователем

  • FriendRequestStatus - который может находиться в состоянии ожидания (если запрос не был принят), принят (если запрос о дружбе был принят) или отклонен (если запрос был отклонен).

вместо того, чтобы я создавал таблицу друзей, я хочу использовать таблицу FriendRequest, чтобы получить всех друзей определенного пользователя - он работает, получая запрос всех друзей, когда определенный пользователь отправляет илиПриемник и FriendRequest принимаются.Затем перейдите к выбору Отправителя в качестве друга, если получателем является пользователь, друзей которого вы ищете, и выберите получателя, если Отправителем был пользователь, друзей которого вы ищете.В конце я хочу получить список.

Моя проблема в том, что я не знаю, как добиться этого в 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 для Springboot - большая проблема

...