我是使用spring-data-mongodb。
我想通过传递一些可选参数来查询数据库。
我有一个领域类。
但是使用以上查询语句并不能返回给定的关键字或用户名的文档。我的查询语句哪里出错了?
这是我发起请求的方法: http://localhost:8080/document/getByCategory?key=key_one&username=ppotdar&categories=category1&categories=category2
我想通过传递一些可选参数来查询数据库。
我有一个领域类。
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
}
我的控制器:
@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;
}
这里的Key和username是可选查询参数。
如果我传递其中任意一个参数,则应返回具有给定key或username的匹配文档。
我的服务方法是:
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));
}
仓库:
@Query("{ $or : [ {'key':?0},{'username':?1},{categories:{$in: ?2}}] }")
List<Doc> findByCategories(String key, String username,List<String> categories, Pageable pageable);
但是使用以上查询语句并不能返回给定的关键字或用户名的文档。我的查询语句哪里出错了?
这是我发起请求的方法: http://localhost:8080/document/getByCategory?key=key_one&username=ppotdar&categories=category1&categories=category2
db.setProfilingLevel(2)
,然后查看你正在执行的确切查询。记得在完成后将其设置为0。 - araknoid