Поиск документов по значению поля внедренного документа - PullRequest
0 голосов
/ 03 января 2019

Я начинаю изучать Spring Boot и MongoDB, и я создал простое приложение: есть User, у которого есть City и список Interests.Я хочу иметь возможность найти список Users, которые живут в определенном City, а также список тех, кто имеет определенный Interest.Вот соответствующие классы:

User.java

@Document
public class User {
    @Id
    private String _id;
    private String username;
    private String password;
    private String firstName;
    private String lastName;
    private Date birthdate;
    @DBRef
    private City city;
    @DBRef
    private List<Interest> interests;
/* ...constructors and getters */

City.java

@Document
public class City {
    @Id
    private String _id;
    private String name;
/* ...constructors and getters */

Interest.java

@Document
public class Interest {
    @Id
    private String _id;
    private String name;
/* ...constructors and getters */

UserRepository.java:

public interface UserRepository extends MongoRepository<User, String> {
    List<User> findByFirstName(String firstName);
    List<User> findByLastName(String lastName);
}

UserController.java:

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository repository;

    @GetMapping
    public List<User> findAll() {
        return repository.findAll();
    }

    @GetMapping("/{id}")
    public Optional<User> findById(@PathVariable String value) {
        return repository.findById(value);
    }

    @GetMapping("/firstName")
    public List<User> findByFirstName(@RequestParam String value) {
        return repository.findByFirstName(value);
    }

    @GetMapping("/lastName")
    public List<User> findByLastName(@RequestParam String value) {
        return repository.findByLastName(value);
    }

    @GetMapping("/city")
    public List<User> findByCityName(@RequestParam String value) {
        // TODO: Implement this
        return null;
    }

    @GetMapping("/interest")
    public List<User> findByInterest(@RequestParam String value) {
        // TODO: Implement this
        return null;
    }

    @PostMapping
    public void save(@RequestBody User user) {
        repository.save(user);
    }

    @PutMapping
    public void update(@RequestBody User user) {
        repository.save(user);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable String id) {
        repository.deleteById(id);
    }
}

Я борюсь с последними двумя GET методами - нахожу список Users по City или Interest.

Мой первый вопрос - я сделал "правильно ли встраивать "City и Interests в класс User?И второй вопрос - может кто-нибудь подсказать, как реализовать поиск?Есть ли способ «расширить» интерфейс (так же, как я делал с именем и фамилией), или я должен каким-то образом использовать @Query?Или есть третий подход?Спасибо.

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