我需要在MongoDB上编写一些复杂的查询和一些简单的查询。我可以使用MongoRepository进行简单查询,使用MongoTemplate和Query或Criteria进行复杂查询实现相同的应用程序。
在同一个应用程序中同时使用MongoTemplate和MongoRepositories是不错的设计。这种方法有什么缺点。
使用大量谓词编写复杂查询的最佳方法是什么,它涉及单个查询中的和,或者IN和Not In。
答案 0 :(得分:1)
尽管MongoRepository比MongoTemplate更易于使用,但是模板可以让您对正在实现的查询进行更细粒度的控制。
说过你仍然可以使用MongoRepository来实现复杂的查询:
@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}")
List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);
可以找到有关here
的更多信息但作为一种做法,在你的代码中同时使用它们实际上是好的,那就是
mongo-template
手动实现一些自定义方法。第1步:
interface CustomEmployeeRepository{
List<Employee> CustomEmployeeMethod(String field)
}
第2步:
public class CustomEmployeeRepositoryImpl implements CustomEmployeeRepository{
@Autowired
private MongoTemplate mongotemplate;
@Override
List<Employee> CustomEmployeeMethod(String field){
}
}
第3步:
现在创建一个扩展MongoRepository
和CustomEmployeeRepository
的新存储库,以使用自定义实现以及存储库的预定义方法。
interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}
通过这种方式,您可以获得两全其美的效果。有关实施的更多信息,请参阅文档。 希望这会有所帮助。