1

を使用して集計を行う必要があり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豆にする方法は?

継承する場合UserRepositoryは、すべてのメソッドを実装する必要があります。抽象化するCustomUserRepoと、インスタンス化できなくなります。


アップデート:

役立つ記事:

しかし、解決策は、クラス名の規則を使用することです。クラス設計で作る方法はありますか?

4

0 に答える 0