Как сделать пользовательский расширенный поиск в Spring Boot Mongodb - PullRequest
0 голосов
/ 30 апреля 2019

Моя цель - сделать пользовательский расширенный поиск с помощью Spring Boot и Mongodb.

Класс контроллера:

@Autowired
UserService userService;

@RequestMapping(value = "/users", method = GET)
public ResponseEntity<List<User>> getUsersByType(@RequestParam("type") String type, 
@RequestParam("id") String id) throws ParseException {

    List<User> usersList = userService.getUsersByType(type, id);
    return new ResponseEntity<List<User>>(partnerList, HttpStatus.OK);
}

Класс обслуживания:

@Service
public class UserService {

@Autowired
UserRepository userRepository;

public List<User> getUsersByType(String type, String id){
    return  userRepository.findBySignUp(type,id);
}

}

Класс репозитория:

@RepositoryRestResource(collectionResourceRel = "user",path = "user")
public interface UserRepository extends MongoRepository<User,String> {

 List<User> findBySignUp(String signUpType, String id);

}

Но в этом случае я хочу передать два параметра и выполнить расширенный поиск на основе следующей схемы сбора монго:

коллекция пользователей:

{  
 "_id":ObjectId("5cad672e902bb3438441bd9d"),
 "email":"user.example@gmail.com",
 "name":"User1",
 "bookletSignUps":[  
  DBRef("booklet",ObjectId("5cad672e902bb3438441bd9c")),
  DBRef("booklet",ObjectId("5cad6747902bb3438441bd9e")),
  DBRef("booklet",ObjectId("5cad6a28902bb346a792c5d3"))
 ],
 "eventSignUps":[  
  DBRef("event",ObjectId("5cad69e5902bb346a792c5d0")),
  DBRef("event",ObjectId("5cad69ff902bb346a792c5d1"))
 ],
  "businessName":"Sample",
  "phone":"test phone number",
  "address":"test address",
  "createdTime":"2015-09-26T01:30:00.000Z",
  "updatedTime":"2017-09-26T01:30:00.000Z"
 }

Класс модели пользователя:

@Document(collection = "user")
public class User {

@Id
private String id;
private String email;
private String name;
private String businessName;
private String phone;
private String address;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date createdTime;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date updatedTime;
@Field("bookletSignups")
@DBRef
private BookletSignUp bookletSignups;
@Field("eventSignups")
@DBRef
private EventSignUp eventSignups;
@Field("infoSignups")
@DBRef
private InfoSignUp infoSignups;
@Field("webinarSignups")
@DBRef
private WebinarSignUp webinarSignups;

}

Итак, на основании этого я хочу отфильтровать пользователей, имеющих определенный signUpType и соответствующий signUpId. Поэтому, если signUpType равен bookletSignUps, а идентификатор - 5cad672e902bb3438441bd9c, я хочу отфильтровать пользователей, у которых есть запись bookletSignUps с идентификатором 5cad672e902bb3438441bd9c. Как сделать этот поиск в MongoRepository? Я немного новичок в монго, так что идеи поддержки будут оценены. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...