通过嵌入式文档的字段值查找文档

时间:2019-01-03 17:19:08

标签: mongodb spring-boot

我开始学习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方法苦苦挣扎-通过UsersCity查找Interest的列表。

我的第一个问题是-我正确进行了City类中的InterestsUser的“嵌入”吗?第二个问题-有人可以提示我如何实施搜索吗?是否可以“扩展”接口(就像我对名字和姓氏所做的那样),还是应该以某种方式使用@Query?还是有第三种方法?谢谢。

0 个答案:

没有答案