Agregacja w Spring Data Mongo

0

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

title

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

0

Problemem była kwestia zrozumienia działania operacji $unwind. Ciekawa lekcja.
Być może ktoś trafi tutaj z podobnym problemem więc zostawiam moje rozwiązanie.

Aggregation aggregation = Aggregation.newAggregation(
				Aggregation.match(Criteria.where("competition.name").is("Premier League")),
				Aggregation.unwind("standings"),
				Aggregation.match(Criteria.where("standings.type").is("AWAY")),
				Aggregation.unwind("standings.table"),
				Aggregation.sort(new Sort(Direction.DESC, "standings.table.draw"))
				);

W rezultacie dostaję tabelę klubów posortowanych według ilości remisów

1 użytkowników online, w tym zalogowanych: 0, gości: 1