を使用して集計を行う必要があり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
と、インスタンス化できなくなります。
アップデート:
役立つ記事:
- Spring Data の MongoTemplate と MongoRepository の違いは何ですか?
- Spring Data JPA でカスタム リポジトリを作成しようとすると、タイプ エラーのプロパティが見つかりません
しかし、解決策は、クラス名の規則を使用することです。クラス設計で作る方法はありますか?