我需要使用MongoTemplate
进行一些聚合。
我使用的是Spring Data MongoDB,因此我的大多数CRUD操作都是通过MongoRepository
接口完成的。我读过关于@NoRepositoryBean
的内容,但我不知道如何在我的案例中使用它。
// UserRepository.java
// imports omitted
@Repository
public interface UserRepository extends MongoRepository<User, String> {
User findOneByUsername(String username);
@Query(value = "{ '_id' : ?0 }", fields = "{ 'username' : 1 }")
User getUserDetails(String userId);
}
// CustomUserRepo.java
// imports omitted
@Component
public class CustomUserRepo {
@Autowired
private final UserRepository userRepository;
public List<Todo> getUserTodos(String userId){
TypedAggregation<User> aggregation = newAggregation(
User.class, Aggregation.match(Criteria.where("_id").is(userId)),
Aggregation.unwind("todos")
);
AggregationResults<Todo> groupResults = mongoTemplate.aggregate(aggregation, User.class, Todo.class);
return groupResults.getMappedResults();
}
}
如何使它成为相同的UserRepository
bean?
如果我继承UserRepository
,我必须实现所有方法。
如果我使CustomUserRepo
抽象,它就无法实例化。
更新
有用的文章:
但解决方案是使用类名约定。有什么方法可以通过课堂设计来实现吗?