{"id":56399,"date":"2016-05-19T13:00:16","date_gmt":"2016-05-19T10:00:16","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=56399"},"modified":"2016-05-19T00:39:51","modified_gmt":"2016-05-18T21:39:51","slug":"data-aggregation-spring-data-mongodb-nested-results","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html","title":{"rendered":"Data Aggregation Spring Data MongoDB: Nested results"},"content":{"rendered":"<h2>1 Introduction<\/h2>\n<p>In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0<a href=\"https:\/\/www.javacodegeeks.com\/2016\/04\/data-aggregation-spring-data-mongodb-spring-boot.html\">Data aggregation with Spring Data MongoDB and Spring Boot<\/a> if you need more detail about how to create the project and configure the application. In this post, we will focus on learning a use case where it makes sense to group a portion of the result in a nested object.<\/p>\n<p>Our test data is a collection of football players, with data about the league they belong to and how many goals they scored. The document would be like this:<\/p>\n<pre class=\"brush:java\">@Document\r\npublic class ScorerResults {\r\n  \r\n  @Id\r\n  private final String player;\r\n  private final String country;\r\n  private final String league;\r\n  private final int goals;\r\n  \r\n  public ScorerResults(String player, String country, String league, int goals) {\r\n    this.player = player;\r\n    this.country = country;\r\n    this.league = league;\r\n    this.goals = goals;\r\n  }\r\n  \r\n  \/\/Getters and setters\r\n}<\/pre>\n<p>It may be interesting to know how many goals were scored in each league. Also, who was the league&#8217;s top goalscorer. During the following section, we are going to implement our first simple example without using nested objects.<\/p>\n<p>You can find the source code of all these examples at my\u00a0<a href=\"https:\/\/github.com\/xpadro\/spring-data-mongo\" target=\"_blank\">Github repository<\/a>.<\/p>\n<h2>2 Basic example<\/h2>\n<p>We can use the following class to store each league&#8217;s result:<\/p>\n<pre class=\"brush:java\">public class ScorerNotNestedStats {\r\n  private String league;\r\n  private int totalGoals;\r\n  private String topPlayer;\r\n  private String topCountry;\r\n  private int topGoals;\r\n  \r\n  \/\/Getters and setters\r\n}<\/pre>\n<p>In order to retrieve the top scorers, we will first need to sort the documents by scored goals and then group them by league. In the repository, these two phases of the pipeline are implemented in the following methods:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java\">private SortOperation buildSortOpertation() {\r\n  return sort(Sort.Direction.DESC, \"goals\");\r\n}\r\n\r\nprivate GroupOperation buildGroupOperation() {\r\n  return group(\"league\")\r\n    .first(\"league\").as(\"league\")\r\n    .sum(\"goals\").as(\"totalGoals\")\r\n    .first(\"player\").as(\"topPlayer\")\r\n    .first(\"goals\").as(\"topGoals\")\r\n    .first(\"country\").as(\"topCountry\");\r\n}<\/pre>\n<p>That should do it. Let&#8217;s aggregate the results using Spring&#8217;s mongoTemplate:<\/p>\n<pre class=\"brush:java\">public List&lt;ScorerNotNestedStats&gt; aggregateNotNested() {\r\n  SortOperation sortOperation = buildSortOpertation();\r\n  GroupOperation groupOperation = buildGroupOperation();\r\n  \r\n  return mongoTemplate.aggregate(Aggregation.newAggregation(\r\n    sortOperation,\r\n    groupOperation\r\n  ), ScorerResults.class, ScorerNotNestedStats.class).getMappedResults();\r\n}<\/pre>\n<p>If we retrieve the stats of the spanish league, we get the following result:<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNotNestedResult.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-56421\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNotNestedResult.png\" alt=\"aggregationNotNestedResult\" width=\"332\" height=\"116\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNotNestedResult.png 332w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNotNestedResult-300x105.png 300w\" sizes=\"(max-width: 332px) 100vw, 332px\" \/><\/a><\/p>\n<p>Although this is fair enough, I don&#8217;t feel comfortable with all top scorer&#8217;s information scattered throughout the result class. I think it would make much more sense if we could encapsulate all scorer&#8217;s data into a nested object. Fortunately, we can do that directly during the aggregation.<\/p>\n<h2>3 Nesting the result<\/h2>\n<p>Spring Data&#8217;s nested method is designed to create sub-documents during the projection phase. This will allow us to create the top goalscorer class as a property of the output result class:<\/p>\n<pre class=\"brush:java\">ProjectionOperation projectionOperation = project(\"totalGoals\")\r\n  .and(\"league\").as(\"league\")\r\n  .and(\"topScorer\").nested(\r\n    bind(\"name\", \"topPlayer\").and(\"goals\", \"topGoals\").and(\"country\", \"topCountry\")\r\n  );<\/pre>\n<p>In the line above, a nested document called topScorer is emitted by the nested method, which will contain all the data about the current league\u2019s top goalscorer. Its properties are mapped to the output class using the bind method (topPlayer, topGoals and topCountry).<\/p>\n<p>MongoTemplate\u2019s invocation reuses our previous sort and group operations, and then adds the projection operation:<\/p>\n<pre class=\"brush:java\">return mongoTemplate.aggregate(Aggregation.newAggregation(\r\n  sortOperation,\r\n  groupOperation,\r\n  projectionOperation\r\n), ScorerResults.class, ScorerStats.class).getMappedResults();<\/pre>\n<p>Executing this query will result in a much more compact result, having all top goalscorer\u2019s related data wrapped in its own class:<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNestedResult.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-56422\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/05\/aggregationNestedResult.png\" alt=\"aggregationNestedResult\" width=\"282\" height=\"137\" \/><\/a><\/p>\n<h2>4 Conclusion<\/h2>\n<p>Spring Data MongoDB nested method is very useful for creating well structured output results from our aggregation queries. Doing this step during the aggregation helps us avoid having java code to post-process the result.<\/p>\n<p>I&#8217;m publishing my new posts on Google plus and Twitter. Follow me if you want to be updated with new content.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/xpadro.blogspot.com\/2016\/05\/data-aggregation-spring-data-mongodb.html\">Data Aggregation Spring Data MongoDB: Nested results<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/join-us\/jcg\/\">JCG partner<\/a> Xavier Padro at the <a href=\"http:\/\/xpadro.blogspot.com\/\">Xavier Padr\u00f3&#8217;s Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data MongoDB and Spring Boot if you need more detail about how to create the project and configure the application. In this post, we will focus on learning a &hellip;<\/p>\n","protected":false},"author":533,"featured_media":187,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[112,321],"class_list":["post-56399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-mongodb","tag-spring-data"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-19T10:00:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Xavier Padro\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/xavips\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Xavier Padro\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html\"},\"author\":{\"name\":\"Xavier Padro\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5443fbc8fb815652f181942d4622090d\"},\"headline\":\"Data Aggregation Spring Data MongoDB: Nested results\",\"datePublished\":\"2016-05-19T10:00:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html\"},\"wordCount\":487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/mongodb-logo.jpg\",\"keywords\":[\"MongoDB\",\"Spring Data\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html\",\"name\":\"Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/mongodb-logo.jpg\",\"datePublished\":\"2016-05-19T10:00:16+00:00\",\"description\":\"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/mongodb-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/mongodb-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/05\\\/data-aggregation-spring-data-mongodb-nested-results.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Data Aggregation Spring Data MongoDB: Nested results\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5443fbc8fb815652f181942d4622090d\",\"name\":\"Xavier Padro\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g\",\"caption\":\"Xavier Padro\"},\"description\":\"Xavier is a software developer working in a consulting firm based in Barcelona. He is specialized in web application development with experience in both frontend and backend. He is interested in everything related to Java and the Spring framework.\",\"sameAs\":[\"http:\\\/\\\/xpadro.blogspot.gr\\\/\",\"http:\\\/\\\/linkedin.com\\\/pub\\\/xavier-padro-sobrepera\\\/1a\\\/64\\\/3\\\/en\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/xavips\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/xavier-padro\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks","description":"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html","og_locale":"en_US","og_type":"article","og_title":"Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks","og_description":"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data","og_url":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2016-05-19T10:00:16+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg","type":"image\/jpeg"}],"author":"Xavier Padro","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/xavips","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Xavier Padro","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html"},"author":{"name":"Xavier Padro","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5443fbc8fb815652f181942d4622090d"},"headline":"Data Aggregation Spring Data MongoDB: Nested results","datePublished":"2016-05-19T10:00:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html"},"wordCount":487,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg","keywords":["MongoDB","Spring Data"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html","url":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html","name":"Data Aggregation Spring Data MongoDB: Nested results - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg","datePublished":"2016-05-19T10:00:16+00:00","description":"1 Introduction In a previous post, we built a basic example of an aggregation pipeline. Maybe you want to take a look at\u00a0Data aggregation with Spring Data","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/mongodb-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2016\/05\/data-aggregation-spring-data-mongodb-nested-results.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Data Aggregation Spring Data MongoDB: Nested results"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5443fbc8fb815652f181942d4622090d","name":"Xavier Padro","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbf0579a188773b88762d54dadc779b2cd17ddb261d809956ed55d8569bd7ca2?s=96&d=mm&r=g","caption":"Xavier Padro"},"description":"Xavier is a software developer working in a consulting firm based in Barcelona. He is specialized in web application development with experience in both frontend and backend. He is interested in everything related to Java and the Spring framework.","sameAs":["http:\/\/xpadro.blogspot.gr\/","http:\/\/linkedin.com\/pub\/xavier-padro-sobrepera\/1a\/64\/3\/en","https:\/\/x.com\/https:\/\/twitter.com\/xavips"],"url":"https:\/\/www.javacodegeeks.com\/author\/xavier-padro"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/56399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/533"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=56399"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/56399\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/187"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=56399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=56399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=56399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}