使用MongoTemplate进行自定义查询

时间:2017-01-07 14:19:44

标签: java mongodb spring-data spring-data-mongodb spring-repositories

我需要使用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抽象,它就无法实例化。

更新

有用的文章:

但解决方案是使用类名约定。有什么方法可以通过课堂设计来实现吗?

0 个答案:

没有答案