我们可以在同一个应用程序中同时使用 MongoRepository 和 MongoTemplate 吗

问题描述 投票:0回答:1
我需要在 MongoDB 上编写一些复杂查询和一些简单查询。我可以使用 MongoRepository 进行简单查询,使用 MongoTemplate 以及 Query 或 Criteria 来实现同一应用程序的复杂查询吗?

在同一应用程序中同时使用 MongoTemplate 和 MongoRepositories 是一个好的设计吗?这种方法有什么缺点吗?

此外,编写具有大量谓词的复杂查询的最佳方法是什么,这些谓词在单个查询中涉及 and、or、IN 和 Not In。

mongodb-query spring-data spring-data-mongodb
1个回答
12
投票
虽然 MongoRepository 比 MongoTemplate 使用起来简单得多,但 MongoTemplate 可以让您对正在实现的查询进行更细粒度的控制。

话虽如此,您仍然可以像这样使用 MongoRepository 来实现复杂的查询:

@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}") List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);
更多信息可以在这里找到

但是作为一种实践,在代码中同时使用这两种方法实际上是很好的,那就是

    当您想使用已经实现的存储库时,请使用存储库。
  1. 当你想要实现逻辑复杂的customMethod时,可以使用
  2. mongo-template
    手动实现一些自定义方法。

实施

第1步:

interface CustomEmployeeRepository{ List<Employee> CustomEmployeeMethod(String field) }
第 2 步:

@Repository 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{ }
这样您就可以两全其美。有关实现的更多信息,请参阅文档。
希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.