Cześć, ucząc się Springa wraz z bazą mongo zatrzymałem się na długi czas przy agregacji. Nie potrafię rozbić dokumentu na te dane które mnie interesują. Mianowicie mam bazę która przechowuje informacje na temat rozgrywek w ligach piłkarskich. Chciałbym uzyskać samą tabelę z konkretnej ligi i konkretnego rodzaju spotkania - mam na myśli spotkania na wyjeździe, u siebie bądź łącznie. O ile udało mi się osiągnąć zamierzony cel w taki sposób:
Criteria leagueCriteria = Criteria.where("competition.name").is("Premier League"); // zostawiam tylko jedną ligę
Criteria matchTypeCriteria = Criteria.where("standings").elemMatch(Criteria.where("type").is("AWAY")); //zostawiam tylko tabelę ze spotkań wyjazdowych
Query query = new BasicQuery(leagueCriteria.getCriteriaObject(), matchTypeCriteria.getCriteriaObject()); //łącze warunki
List<LeagueStandingsDetails> awayTable = mongoOperations.find(query, LeagueStandingsDetails.class); //wykonuje polecenie
Tak nie mogę tego wystrugać używając agregacji. Próbowałem to zrobić w taki sposób:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("competition.name").is("Premier League")), //z zamysłem wyciągnięcia dokumentu z interesującą mnie ligą
Aggregation.unwind("standings"), //z zamysłem rozbicia dokumentu na trzy mniejsze gdzie każdy to inny rodzaj meczu (tj.: TOTAL, HOME, AWAY)
Aggregation.match(Criteria.where("standings").elemMatch(Criteria.where("type").is("AWAY"))), //z zamysłem zostawienia dokumentu z wprowadzonym rodzajem rozgrywki
Aggregation.unwind("table"));
AggregationResults<Standings> aggregationResult = mongoOperations.aggregate(aggregation, "standings", Standings.class);
No, więc już pewnie wiecie jak bardzo skuteczny okazał się mój zamysł:D
A tutaj część struktury kolekcji klik