Моя цель - сделать пользовательский расширенный поиск с помощью 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? Я немного новичок в монго, так что идеи поддержки будут оценены. Заранее спасибо.