Tôi đang sử dụng spring-data-mongodb.spring-data-mongodb tham số truy vấn tùy chọn
Tôi muốn truy vấn cơ sở dữ liệu bằng cách chuyển một số tham số tùy chọn trong truy vấn của mình.
Tôi có một lớp miền.
public class Doc {
@Id
private String id;
private String type;
private String name;
private int index;
private String data;
private String description;
private String key;
private String username;
// getter & setter
}
điều khiển của tôi:
@RequestMapping(value = "/getByCategory", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
public Iterable<Doc> getByCategory(
@RequestParam(value = "key", required = false) String key,
@RequestParam(value = "username", required = false) String username,
@RequestParam(value = "page", required = false, defaultValue = "0") int page,
@RequestParam(value = "size", required = false, defaultValue = "0") int size,
@RequestParam(value = "categories") List<String> categories)
throws EntityNotFoundException {
Iterable<Doc> nodes = docService.getByCategory(key, username , categories, page, size);
return nodes;
}
Đây chính và Tên truy nhập là tham số truy vấn tùy chọn.
Nếu tôi vượt qua bất kỳ một trong số họ, nó phải trả lại tài liệu phù hợp với khóa hoặc tên người dùng đã cho.
phương pháp dịch vụ của tôi là:
public Iterable<Doc> getByCategory(String key, String username, List<String> categories, int page, int size) {
return repository.findByCategories(key, username, categories, new PageRequest(page, size));
}
Repository:
@Query("{ $or : [ {'key':?0},{'username':?1},{categories:{$in: ?2}}] }")
List<Doc> findByCategories(String key, String username,List<String> categories, Pageable pageable);
Nhưng bằng cách sử dụng trên truy vấn nó không trả về một tài liệu với một trong hai chìa khóa nhất định hoặc tên người dùng. Có gì sai trong truy vấn của tôi?
Đây là cách tôi đang làm theo yêu cầu http://localhost:8080/document/getByCategory?key=key_one&username=ppotdar&categories=category1&categories=category2
Bạn có thể bắt đầu đặt bạn MongoDB Profiler để ghi nhật ký tất cả các thao tác (và do đó truy vấn) bằng lệnh 'db.setProfilingLevel (2) 'và sau đó xem chính xác truy vấn bạn đang thực hiện. Hãy nhớ đặt thành 0 sau khi bạn hoàn tất. – araknoid