diff --git a/assets/js/935f2afb.e9b33cbe.js b/assets/js/935f2afb.53675f54.js
similarity index 91%
rename from assets/js/935f2afb.e9b33cbe.js
rename to assets/js/935f2afb.53675f54.js
index 9012987..b0e1cdb 100644
--- a/assets/js/935f2afb.e9b33cbe.js
+++ b/assets/js/935f2afb.53675f54.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkaggregation_pipeline_workshop=self.webpackChunkaggregation_pipeline_workshop||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/aggregation-pipeline-lab/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Prerequisites","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Set up Lab","href":"/aggregation-pipeline-lab/docs/mongodb-atlas/setup-lab","docId":"mongodb-atlas/setup-lab","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/prerequisites"},{"type":"category","label":"The Aggregation Pipeline","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udcd8 What is an Aggregation Pipeline","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/what-is-aggregation","docId":"what-is-aggregation/what-is-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udcd8 SQL vs Aggregations","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/sql-vs-aggregation","docId":"what-is-aggregation/sql-vs-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udcd8 Structure of an aggregation pipeline","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/structure-aggregation","docId":"what-is-aggregation/structure-aggregation","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/the-aggregation-pipeline"},{"type":"category","label":"Simple Pipelines","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Using the library database","href":"/aggregation-pipeline-lab/docs/simple-queries/using-library-database","docId":"simple-queries/using-library-database","unlisted":false},{"type":"link","label":"\ud83d\udc50 Empty aggregation pipeline","href":"/aggregation-pipeline-lab/docs/simple-queries/empty-aggregation","docId":"simple-queries/empty-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udc50 $match","href":"/aggregation-pipeline-lab/docs/simple-queries/match","docId":"simple-queries/match","unlisted":false},{"type":"link","label":"\ud83d\udc50 $project","href":"/aggregation-pipeline-lab/docs/simple-queries/project","docId":"simple-queries/project","unlisted":false},{"type":"link","label":"\ud83d\udc50 $limit","href":"/aggregation-pipeline-lab/docs/simple-queries/limiting-results","docId":"simple-queries/limiting-results","unlisted":false},{"type":"link","label":"\ud83d\udc50 Combining stages","href":"/aggregation-pipeline-lab/docs/simple-queries/combining-them-all","docId":"simple-queries/combining-them-all","unlisted":false},{"type":"link","label":"\ud83d\udc50 Writing long pipelines","href":"/aggregation-pipeline-lab/docs/simple-queries/writing-long-pipelines","docId":"simple-queries/writing-long-pipelines","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Repeating stages","href":"/aggregation-pipeline-lab/docs/simple-queries/repeating-stages","docId":"simple-queries/repeating-stages","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Aggregation options","href":"/aggregation-pipeline-lab/docs/simple-queries/aggregation-options","docId":"simple-queries/aggregation-options","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/simple-pipelines"},{"type":"category","label":"Using Arrays","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Simple Array queries","href":"/aggregation-pipeline-lab/docs/using-arrays/simple-match-array","docId":"using-arrays/simple-match-array","unlisted":false},{"type":"link","label":"\ud83d\udc50 Searching inside Objects in arrays","href":"/aggregation-pipeline-lab/docs/using-arrays/search-inside-objects-in-arrays","docId":"using-arrays/search-inside-objects-in-arrays","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/using-arrays"},{"type":"category","label":"Counting and Sorting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 $count","href":"/aggregation-pipeline-lab/docs/counting-sorting/counting-documents","docId":"counting-sorting/counting-documents","unlisted":false},{"type":"link","label":"\ud83d\udc50 Sorting","href":"/aggregation-pipeline-lab/docs/counting-sorting/sorting","docId":"counting-sorting/sorting","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/counting-and-sorting"},{"type":"category","label":"Lookups / Joins","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Lookups AKA Left Outer Join","href":"/aggregation-pipeline-lab/docs/lookups/lookups","docId":"lookups/lookups","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Advanced lookups","href":"/aggregation-pipeline-lab/docs/lookups/advanced-lookups","docId":"lookups/advanced-lookups","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/lookups--joins"},{"type":"category","label":"Grouping Results","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Group","href":"/aggregation-pipeline-lab/docs/grouping/group","docId":"grouping/group","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/grouping-results"},{"type":"category","label":"Modifying Results","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Adding new fields to results","href":"/aggregation-pipeline-lab/docs/modifying-results/adding-fields","docId":"modifying-results/adding-fields","unlisted":false},{"type":"link","label":"\ud83e\uddb8 Missing Data","href":"/aggregation-pipeline-lab/docs/modifying-results/missing-data","docId":"modifying-results/missing-data","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/modifying-results"},{"type":"category","label":"Exporting Data","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\uddb8 Saving to a collection","href":"/aggregation-pipeline-lab/docs/exporting-data/saving-to-collection","docId":"exporting-data/saving-to-collection","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/exporting-data"},{"type":"link","label":"\ud83d\udcd8 Lecture material","href":"/aggregation-pipeline-lab/docs/lecture-material","docId":"lecture-material","unlisted":false},{"type":"link","label":"\ud83c\udfaf Summary","href":"/aggregation-pipeline-lab/docs/summary","docId":"summary","unlisted":false}]},"docs":{"counting-sorting/counting-documents":{"id":"counting-sorting/counting-documents","title":"\ud83d\udc50 $count","description":"How can we be sure that this pipeline is returning exactly 15 books?","sidebar":"tutorialSidebar"},"counting-sorting/sorting":{"id":"counting-sorting/sorting","title":"\ud83d\udc50 Sorting","description":"We can sort our results using the $sort stage. We need to sort on a field, being 1 ascending and -1 descending order.","sidebar":"tutorialSidebar"},"exporting-data/saving-to-collection":{"id":"exporting-data/saving-to-collection","title":"\ud83e\uddb8 Saving to a collection","description":"You can export the result of an aggregation pipeline to a different DB / Collection. To do that just add a last aggregation stage to your pipeline:","sidebar":"tutorialSidebar"},"grouping/group":{"id":"grouping/group","title":"\ud83d\udc50 Group","description":"We can sum all the pages for all books in each year:","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Intro","description":"|Lab goals|Learn about aggregation pipelines|","sidebar":"tutorialSidebar"},"lecture-material":{"id":"lecture-material","title":"\ud83d\udcd8 Lecture material","description":"|||","sidebar":"tutorialSidebar"},"lookups/advanced-lookups":{"id":"lookups/advanced-lookups","title":"\ud83e\uddb8\u200d\u2642\ufe0f Advanced lookups","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"lookups/lookups":{"id":"lookups/lookups","title":"\ud83d\udc50 Lookups AKA Left Outer Join","description":"Using Documents we usually model 1many relationships embedding documents inside other documents, even using arrays for that. For instance an Author can have many aliases, and they live inside an array in the authors collection.","sidebar":"tutorialSidebar"},"modifying-results/adding-fields":{"id":"modifying-results/adding-fields","title":"\ud83d\udc50 Adding new fields to results","description":"$addFields","sidebar":"tutorialSidebar"},"modifying-results/missing-data":{"id":"modifying-results/missing-data","title":"\ud83e\uddb8 Missing Data","description":"Sometimes we\'re missing a field we\'re looking for (it\'s not there, as documents in a collection can be polymorphic, so this field is null). For these cases we can check if something is there using $ifNull and add a default value in that case.","sidebar":"tutorialSidebar"},"mongodb-atlas/setup-lab":{"id":"mongodb-atlas/setup-lab","title":"\ud83d\udc50 Set up Lab","description":"Setting up your MongoDB Atlas account, importing Library data","sidebar":"tutorialSidebar"},"simple-queries/aggregation-options":{"id":"simple-queries/aggregation-options","title":"\ud83e\uddb8\u200d\u2642\ufe0f Aggregation options","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"simple-queries/combining-them-all":{"id":"simple-queries/combining-them-all","title":"\ud83d\udc50 Combining stages","description":"Up until now, we\'ve just been using one stage in the pipeline. But the power of the aggregation pipeline is that we can use many stages, and the output of one will be the input of the next. Think of it as UNIX pipes or using functional programming with map, filter, reduce, flatmap, etc.","sidebar":"tutorialSidebar"},"simple-queries/empty-aggregation":{"id":"simple-queries/empty-aggregation","title":"\ud83d\udc50 Empty aggregation pipeline","description":"An empty aggregation","sidebar":"tutorialSidebar"},"simple-queries/limiting-results":{"id":"simple-queries/limiting-results","title":"\ud83d\udc50 $limit","description":"If we return too many documents, but we\'re interested just in a few, we can limit the number of documents returned using $limit","sidebar":"tutorialSidebar"},"simple-queries/match":{"id":"simple-queries/match","title":"\ud83d\udc50 $match","description":"The $match operator is used in conjunction with the aggregation framework to filter documents in a collection. It takes a document as input and returns a new document containing only the documents that match the specified criteria. The syntax for the $match operator is as follows:","sidebar":"tutorialSidebar"},"simple-queries/project":{"id":"simple-queries/project","title":"\ud83d\udc50 $project","description":"Including fields in a projection","sidebar":"tutorialSidebar"},"simple-queries/repeating-stages":{"id":"simple-queries/repeating-stages","title":"\ud83e\uddb8\u200d\u2642\ufe0f Repeating stages","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"simple-queries/using-library-database":{"id":"simple-queries/using-library-database","title":"\ud83d\udc50 Using the library database","description":"Select the library database","sidebar":"tutorialSidebar"},"simple-queries/writing-long-pipelines":{"id":"simple-queries/writing-long-pipelines","title":"\ud83d\udc50 Writing long pipelines","description":"Aggregation pipelines can get very long, depending on how many stages we need to run. Writing a pipeline is writing code, as you will write it using one of the many MongoDB drivers in your own language. Here we\'re presenting the examples using JavaScript suitable for the MongoDB Shell mongosh, but if you are writing a microservice in Rust, you\'ll definitely write your pipelines in Rust.","sidebar":"tutorialSidebar"},"summary":{"id":"summary","title":"\ud83c\udfaf Summary","description":"Congratulations! Following this tutorial, you have successfully:","sidebar":"tutorialSidebar"},"using-arrays/search-inside-objects-in-arrays":{"id":"using-arrays/search-inside-objects-in-arrays","title":"\ud83d\udc50 Searching inside Objects in arrays","description":"In our books we\'re using the Attribute Pattern to have different attributes in our documents. As we can see in the sample doc we have an attributes array, containing several objects, each with the same structure:","sidebar":"tutorialSidebar"},"using-arrays/simple-match-array":{"id":"using-arrays/simple-match-array","title":"\ud83d\udc50 Simple Array queries","description":"Find data in arrays","sidebar":"tutorialSidebar"},"what-is-aggregation/sql-vs-aggregation":{"id":"what-is-aggregation/sql-vs-aggregation","title":"\ud83d\udcd8 SQL vs Aggregations","description":"Let\'s compare SQL with an Aggregation Pipeline","sidebar":"tutorialSidebar"},"what-is-aggregation/structure-aggregation":{"id":"what-is-aggregation/structure-aggregation","title":"\ud83d\udcd8 Structure of an aggregation pipeline","description":"See the parts that compose an Aggregation Pipeline","sidebar":"tutorialSidebar"},"what-is-aggregation/what-is-aggregation":{"id":"what-is-aggregation/what-is-aggregation","title":"\ud83d\udcd8 What is an Aggregation Pipeline","description":"Learn what is an Aggregation Pipeline","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkaggregation_pipeline_workshop=self.webpackChunkaggregation_pipeline_workshop||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/aggregation-pipeline-lab/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Prerequisites","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Set up Lab","href":"/aggregation-pipeline-lab/docs/mongodb-atlas/setup-lab","docId":"mongodb-atlas/setup-lab","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/prerequisites"},{"type":"category","label":"The Aggregation Pipeline","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udcd8 What is an Aggregation Pipeline","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/what-is-aggregation","docId":"what-is-aggregation/what-is-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udcd8 SQL vs Aggregations","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/sql-vs-aggregation","docId":"what-is-aggregation/sql-vs-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udcd8 Structure of an aggregation pipeline","href":"/aggregation-pipeline-lab/docs/what-is-aggregation/structure-aggregation","docId":"what-is-aggregation/structure-aggregation","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/the-aggregation-pipeline"},{"type":"category","label":"Simple Pipelines","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Using the library database","href":"/aggregation-pipeline-lab/docs/simple-queries/using-library-database","docId":"simple-queries/using-library-database","unlisted":false},{"type":"link","label":"\ud83d\udc50 Empty aggregation pipeline","href":"/aggregation-pipeline-lab/docs/simple-queries/empty-aggregation","docId":"simple-queries/empty-aggregation","unlisted":false},{"type":"link","label":"\ud83d\udc50 $match","href":"/aggregation-pipeline-lab/docs/simple-queries/match","docId":"simple-queries/match","unlisted":false},{"type":"link","label":"\ud83d\udc50 $project","href":"/aggregation-pipeline-lab/docs/simple-queries/project","docId":"simple-queries/project","unlisted":false},{"type":"link","label":"\ud83d\udc50 $limit","href":"/aggregation-pipeline-lab/docs/simple-queries/limiting-results","docId":"simple-queries/limiting-results","unlisted":false},{"type":"link","label":"\ud83d\udc50 Combining stages","href":"/aggregation-pipeline-lab/docs/simple-queries/combining-them-all","docId":"simple-queries/combining-them-all","unlisted":false},{"type":"link","label":"\ud83d\udc50 Writing long pipelines","href":"/aggregation-pipeline-lab/docs/simple-queries/writing-long-pipelines","docId":"simple-queries/writing-long-pipelines","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Repeating stages","href":"/aggregation-pipeline-lab/docs/simple-queries/repeating-stages","docId":"simple-queries/repeating-stages","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Aggregation options","href":"/aggregation-pipeline-lab/docs/simple-queries/aggregation-options","docId":"simple-queries/aggregation-options","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/simple-pipelines"},{"type":"category","label":"Using Arrays","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Simple Array queries","href":"/aggregation-pipeline-lab/docs/using-arrays/simple-match-array","docId":"using-arrays/simple-match-array","unlisted":false},{"type":"link","label":"\ud83d\udc50 Searching inside Objects in arrays","href":"/aggregation-pipeline-lab/docs/using-arrays/search-inside-objects-in-arrays","docId":"using-arrays/search-inside-objects-in-arrays","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/using-arrays"},{"type":"category","label":"Counting and Sorting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 $count","href":"/aggregation-pipeline-lab/docs/counting-sorting/counting-documents","docId":"counting-sorting/counting-documents","unlisted":false},{"type":"link","label":"\ud83d\udc50 Sorting","href":"/aggregation-pipeline-lab/docs/counting-sorting/sorting","docId":"counting-sorting/sorting","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/counting-and-sorting"},{"type":"category","label":"Lookups / Joins","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Lookups AKA Left Outer Join","href":"/aggregation-pipeline-lab/docs/lookups/lookups","docId":"lookups/lookups","unlisted":false},{"type":"link","label":"\ud83e\uddb8\u200d\u2642\ufe0f Advanced lookups","href":"/aggregation-pipeline-lab/docs/lookups/advanced-lookups","docId":"lookups/advanced-lookups","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/lookups--joins"},{"type":"category","label":"Grouping Results","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Group","href":"/aggregation-pipeline-lab/docs/grouping/group","docId":"grouping/group","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/grouping-results"},{"type":"category","label":"Modifying Results","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83d\udc50 Adding new fields to results","href":"/aggregation-pipeline-lab/docs/modifying-results/adding-fields","docId":"modifying-results/adding-fields","unlisted":false},{"type":"link","label":"\ud83e\uddb8 Missing Data","href":"/aggregation-pipeline-lab/docs/modifying-results/missing-data","docId":"modifying-results/missing-data","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/modifying-results"},{"type":"category","label":"Exporting Data","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\uddb8 Saving to a collection","href":"/aggregation-pipeline-lab/docs/exporting-data/saving-to-collection","docId":"exporting-data/saving-to-collection","unlisted":false}],"href":"/aggregation-pipeline-lab/docs/category/exporting-data"},{"type":"link","label":"\ud83d\udcd8 Lecture material","href":"/aggregation-pipeline-lab/docs/lecture-material","docId":"lecture-material","unlisted":false},{"type":"link","label":"\ud83c\udfaf Summary","href":"/aggregation-pipeline-lab/docs/summary","docId":"summary","unlisted":false}]},"docs":{"counting-sorting/counting-documents":{"id":"counting-sorting/counting-documents","title":"\ud83d\udc50 $count","description":"How can we be sure that this pipeline is returning exactly 15 books?","sidebar":"tutorialSidebar"},"counting-sorting/sorting":{"id":"counting-sorting/sorting","title":"\ud83d\udc50 Sorting","description":"We can sort our results using the $sort stage. We need to sort on a field, being 1 ascending and -1 descending order.","sidebar":"tutorialSidebar"},"exporting-data/saving-to-collection":{"id":"exporting-data/saving-to-collection","title":"\ud83e\uddb8 Saving to a collection","description":"You can export the result of an aggregation pipeline to a different DB / Collection. To do that just add a last aggregation stage to your pipeline:","sidebar":"tutorialSidebar"},"grouping/group":{"id":"grouping/group","title":"\ud83d\udc50 Group","description":"We can sum all the pages for all books in each year:","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Intro","description":"|Lab goals|Learn about aggregation pipelines|","sidebar":"tutorialSidebar"},"lecture-material":{"id":"lecture-material","title":"\ud83d\udcd8 Lecture material","description":"|||","sidebar":"tutorialSidebar"},"lookups/advanced-lookups":{"id":"lookups/advanced-lookups","title":"\ud83e\uddb8\u200d\u2642\ufe0f Advanced lookups","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"lookups/lookups":{"id":"lookups/lookups","title":"\ud83d\udc50 Lookups AKA Left Outer Join","description":"Using Documents we usually model 1many relationships embedding documents inside other documents, even using arrays for that. For instance an Author can have many aliases, and they live inside an array in the authors collection.","sidebar":"tutorialSidebar"},"modifying-results/adding-fields":{"id":"modifying-results/adding-fields","title":"\ud83d\udc50 Adding new fields to results","description":"$addFields","sidebar":"tutorialSidebar"},"modifying-results/missing-data":{"id":"modifying-results/missing-data","title":"\ud83e\uddb8 Missing Data","description":"Sometimes we\'re missing a field we\'re looking for (it\'s not there, as documents in a collection can be polymorphic, so this field is null). For these cases we can check if something is there using $ifNull and add a default value in that case.","sidebar":"tutorialSidebar"},"mongodb-atlas/setup-lab":{"id":"mongodb-atlas/setup-lab","title":"\ud83d\udc50 Set up Lab","description":"Setting up your MongoDB Atlas account, importing Library data","sidebar":"tutorialSidebar"},"simple-queries/aggregation-options":{"id":"simple-queries/aggregation-options","title":"\ud83e\uddb8\u200d\u2642\ufe0f Aggregation options","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"simple-queries/combining-them-all":{"id":"simple-queries/combining-them-all","title":"\ud83d\udc50 Combining stages","description":"Up until now, we\'ve just been using one stage in the pipeline. But the power of the aggregation pipeline is that we can use many stages, and the output of one will be the input of the next. Think of it as UNIX pipes or using functional programming with map, filter, reduce, flatmap, etc.","sidebar":"tutorialSidebar"},"simple-queries/empty-aggregation":{"id":"simple-queries/empty-aggregation","title":"\ud83d\udc50 Empty aggregation pipeline","description":"An empty aggregation","sidebar":"tutorialSidebar"},"simple-queries/limiting-results":{"id":"simple-queries/limiting-results","title":"\ud83d\udc50 $limit","description":"If we return too many documents, but we\'re interested just in a few, we can limit the number of documents returned using $limit","sidebar":"tutorialSidebar"},"simple-queries/match":{"id":"simple-queries/match","title":"\ud83d\udc50 $match","description":"The $match operator is used in conjunction with the aggregation framework to filter documents in a collection. It takes a document as input and returns a new document containing only the documents that match the specified criteria. The syntax for the $match operator is as follows:","sidebar":"tutorialSidebar"},"simple-queries/project":{"id":"simple-queries/project","title":"\ud83d\udc50 $project","description":"Including fields in a projection","sidebar":"tutorialSidebar"},"simple-queries/repeating-stages":{"id":"simple-queries/repeating-stages","title":"\ud83e\uddb8\u200d\u2642\ufe0f Repeating stages","description":"Extra activity, do it if you have extra time or are following at home, won\'t be covered during the hands-on Lab","sidebar":"tutorialSidebar"},"simple-queries/using-library-database":{"id":"simple-queries/using-library-database","title":"\ud83d\udc50 Using the library database","description":"Select the library database","sidebar":"tutorialSidebar"},"simple-queries/writing-long-pipelines":{"id":"simple-queries/writing-long-pipelines","title":"\ud83d\udc50 Writing long pipelines","description":"Aggregation pipelines can get very long, depending on how many stages we need to run. Writing a pipeline is writing code, as you will write it using one of the many MongoDB drivers in your own language. Here we\'re presenting the examples using JavaScript suitable for the MongoDB Shell mongosh, but if you are writing a microservice in Rust, you\'ll definitely write your pipelines in Rust.","sidebar":"tutorialSidebar"},"summary":{"id":"summary","title":"\ud83c\udfaf Summary","description":"Congratulations! Following this tutorial, you have successfully:","sidebar":"tutorialSidebar"},"using-arrays/search-inside-objects-in-arrays":{"id":"using-arrays/search-inside-objects-in-arrays","title":"\ud83d\udc50 Searching inside Objects in arrays","description":"In the books collection, we\'re using the Attribute Pattern to store different attributes in our documents. As we can see in the sample doc, we have an attributes array, containing several objects, each with the same structure:","sidebar":"tutorialSidebar"},"using-arrays/simple-match-array":{"id":"using-arrays/simple-match-array","title":"\ud83d\udc50 Simple Array queries","description":"Find data in arrays","sidebar":"tutorialSidebar"},"what-is-aggregation/sql-vs-aggregation":{"id":"what-is-aggregation/sql-vs-aggregation","title":"\ud83d\udcd8 SQL vs Aggregations","description":"Let\'s compare SQL with an Aggregation Pipeline","sidebar":"tutorialSidebar"},"what-is-aggregation/structure-aggregation":{"id":"what-is-aggregation/structure-aggregation","title":"\ud83d\udcd8 Structure of an aggregation pipeline","description":"See the parts that compose an Aggregation Pipeline","sidebar":"tutorialSidebar"},"what-is-aggregation/what-is-aggregation":{"id":"what-is-aggregation/what-is-aggregation","title":"\ud83d\udcd8 What is an Aggregation Pipeline","description":"Learn what is an Aggregation Pipeline","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/e3985b5e.b1dc4533.js b/assets/js/e3985b5e.b1dc4533.js
new file mode 100644
index 0000000..9312351
--- /dev/null
+++ b/assets/js/e3985b5e.b1dc4533.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkaggregation_pipeline_workshop=self.webpackChunkaggregation_pipeline_workshop||[]).push([[571],{4031:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var s=t(4848),r=t(8453);const a={},i="\ud83d\udc50 Searching inside Objects in arrays",o={id:"using-arrays/search-inside-objects-in-arrays",title:"\ud83d\udc50 Searching inside Objects in arrays",description:"In the books collection, we're using the Attribute Pattern to store different attributes in our documents. As we can see in the sample doc, we have an attributes array, containing several objects, each with the same structure:",source:"@site/docs/40-using-arrays/2-search-inside-objects-in-arrays.mdx",sourceDirName:"40-using-arrays",slug:"/using-arrays/search-inside-objects-in-arrays",permalink:"/aggregation-pipeline-lab/docs/using-arrays/search-inside-objects-in-arrays",draft:!1,unlisted:!1,editUrl:"https://github.com/mongodb-developer/aggregation-pipeline-lab/blob/main/docs/40-using-arrays/2-search-inside-objects-in-arrays.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udc50 Simple Array queries",permalink:"/aggregation-pipeline-lab/docs/using-arrays/simple-match-array"},next:{title:"Counting and Sorting",permalink:"/aggregation-pipeline-lab/docs/category/counting-and-sorting"}},c={},d=[];function h(e){const n={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"-searching-inside-objects-in-arrays",children:"\ud83d\udc50 Searching inside Objects in arrays"}),"\n",(0,s.jsxs)(n.p,{children:["In the books collection, we're using the ",(0,s.jsx)(n.a,{href:"https://www.mongodb.com/developer/products/mongodb/attribute-pattern/",children:"Attribute Pattern"})," to store different attributes in our documents. As we can see in the ",(0,s.jsx)(n.a,{href:"/docs/simple-queries/project",children:"sample doc"}),", we have an ",(0,s.jsx)(n.code,{children:"attributes"})," array, containing several objects, each with the same structure:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"attributes: [\n {\n key: 'edition',\n value: '1st'\n },\n {\n key: 'dimensions',\n value: 'Height: 1.111 Inches, Length: 1.111 Inches, Weight: 0.2 Pounds, Width: 1.111 Inches'\n },\n {\n key: 'isbn13',\n value: '9780765342508'\n },\n {\n key: 'msrp',\n value: 6.99\n },\n {\n key: 'isbn',\n value: '0765342502'\n },\n {\n key: 'isbn10',\n value: '0765342502'\n }\n ],\n"})}),"\n",(0,s.jsxs)(n.p,{children:["How do we search for all the books that have an msrp of 9.99? We want books that, inside ",(0,s.jsx)(n.code,{children:"attributes"})," has an object with key ",(0,s.jsx)(n.code,{children:"msrp"})," and value ",(0,s.jsx)(n.code,{children:"9.99"}),". We can get it to work with this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'db.books.aggregate([\n { $unwind : "$attributes" },\n {$match: {"attributes.key": "msrp", "attributes.value": 9.99} },\n {$project: {title: 1, attributes: 1}}\n]);\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Here we're getting a copy of each book for each object inside the ",(0,s.jsx)(n.code,{children:"$attributes"}),' array. This "flattens" the array and returns many copies of the same documents, one for each different attribute that we have which will be different for each of these generated docs.']}),"\n",(0,s.jsxs)(n.p,{children:["\ud83d\udc50 To better understand ",(0,s.jsx)(n.code,{children:"$unwind"}),", run this aggregation"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'db.books.aggregate([\n { $match: {_id: "0395623650"} },\n { $unwind : "$attributes" },\n]);\n'})}),"\n",(0,s.jsx)(n.p,{children:"You should get one document per attribute of the original book."}),"\n",(0,s.jsx)(n.p,{children:"But you can actually match documents in an array in a more straightforward fashion:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:'let nineNinetyNine = {$match: {"attributes.key": "msrp", "attributes.value": 9.99}};\nlet showOnlyTheseFields = {$project: {_id: 0, title: 1, year: 1, totalInventory: 1, available: 1, "attributes": 1}};\n\ndb.books.aggregate([\n nineNinetyNine,\n showOnlyTheseFields,\n]);\n'})})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var s=t(6540);const r={},a=s.createContext(r);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/e3985b5e.e8f439e6.js b/assets/js/e3985b5e.e8f439e6.js
deleted file mode 100644
index 4bb2fd2..0000000
--- a/assets/js/e3985b5e.e8f439e6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkaggregation_pipeline_workshop=self.webpackChunkaggregation_pipeline_workshop||[]).push([[571],{4031:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var a=t(4848),r=t(8453);const s={},i="\ud83d\udc50 Searching inside Objects in arrays",o={id:"using-arrays/search-inside-objects-in-arrays",title:"\ud83d\udc50 Searching inside Objects in arrays",description:"In our books we're using the Attribute Pattern to have different attributes in our documents. As we can see in the sample doc we have an attributes array, containing several objects, each with the same structure:",source:"@site/docs/40-using-arrays/2-search-inside-objects-in-arrays.mdx",sourceDirName:"40-using-arrays",slug:"/using-arrays/search-inside-objects-in-arrays",permalink:"/aggregation-pipeline-lab/docs/using-arrays/search-inside-objects-in-arrays",draft:!1,unlisted:!1,editUrl:"https://github.com/mongodb-developer/aggregation-pipeline-lab/blob/main/docs/40-using-arrays/2-search-inside-objects-in-arrays.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udc50 Simple Array queries",permalink:"/aggregation-pipeline-lab/docs/using-arrays/simple-match-array"},next:{title:"Counting and Sorting",permalink:"/aggregation-pipeline-lab/docs/category/counting-and-sorting"}},c={},d=[];function h(e){const n={a:"a",code:"code",h1:"h1",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"-searching-inside-objects-in-arrays",children:"\ud83d\udc50 Searching inside Objects in arrays"}),"\n",(0,a.jsxs)(n.p,{children:["In our books we're using the ",(0,a.jsx)(n.a,{href:"https://www.mongodb.com/developer/products/mongodb/attribute-pattern/",children:"Attribute Pattern"})," to have different attributes in our documents. As we can see in the ",(0,a.jsx)(n.a,{href:"/docs/simple-queries/project",children:"sample doc"})," we have an ",(0,a.jsx)(n.code,{children:"attributes"})," array, containing several objects, each with the same structure:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:"attributes: [\n {\n key: 'edition',\n value: '1st'\n },\n {\n key: 'dimensions',\n value: 'Height: 1.111 Inches, Length: 1.111 Inches, Weight: 0.2 Pounds, Width: 1.111 Inches'\n },\n {\n key: 'isbn13',\n value: '9780765342508'\n },\n {\n key: 'msrp',\n value: 6.99\n },\n {\n key: 'isbn',\n value: '0765342502'\n },\n {\n key: 'isbn10',\n value: '0765342502'\n }\n ],\n"})}),"\n",(0,a.jsxs)(n.p,{children:["How do we search for all the books that have an msrp of 9.99? We want books that, inside ",(0,a.jsx)(n.code,{children:"attributes"})," has an object with key ",(0,a.jsx)(n.code,{children:"msrp"})," and value ",(0,a.jsx)(n.code,{children:"9.99"}),". We can get it to work with this:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'db.books.aggregate([\n { $unwind : "$attributes" },\n {$match: {"attributes.key": "msrp", "attributes.value": 9.99} },\n {$project: {title: 1, attributes: 1}}\n]);\n'})}),"\n",(0,a.jsxs)(n.p,{children:["Here we're getting a copy of each book for each object inside the ",(0,a.jsx)(n.code,{children:"$attributes"}),' array. This "flattens" the array and returns many copies of the same documents, one for each different attribute that we have which will be different for each of these generated docs.']}),"\n",(0,a.jsxs)(n.p,{children:["\ud83d\udc50 To better understand ",(0,a.jsx)(n.code,{children:"$unwind"}),", run this aggregation"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'db.books.aggregate([\n { $match: {_id: "0395623650"} },\n { $unwind : "$attributes" },\n]);\n'})}),"\n",(0,a.jsx)(n.p,{children:"You should get one document per attribute of the original book."}),"\n",(0,a.jsx)(n.p,{children:"But you can actually match documents in an array in a more straightforward fashion:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-js",children:'let nineNinetyNine = {$match: {"attributes.key": "msrp", "attributes.value": 9.99}};\nlet showOnlyTheseFields = {$project: {_id: 0, title: 1, year: 1, totalInventory: 1, available: 1, "attributes": 1}};\n\ndb.books.aggregate([\n nineNinetyNine,\n showOnlyTheseFields,\n]);\n'})})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var a=t(6540);const r={},s=a.createContext(r);function i(e){const n=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.9ed809ac.js b/assets/js/runtime~main.aeea51d2.js
similarity index 63%
rename from assets/js/runtime~main.9ed809ac.js
rename to assets/js/runtime~main.aeea51d2.js
index 5b5ee72..1497a03 100644
--- a/assets/js/runtime~main.9ed809ac.js
+++ b/assets/js/runtime~main.aeea51d2.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,t,r,f,c={},o={};function d(e){var a=o[e];if(void 0!==a)return a.exports;var t=o[e]={exports:{}};return c[e].call(t.exports,t,t.exports,d),t.exports}d.m=c,e=[],d.O=(a,t,r,f)=>{if(!t){var c=1/0;for(i=0;i=f)&&Object.keys(d.O).every((e=>d.O[e](t[n])))?t.splice(n--,1):(o=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[t,r,f]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var c={};a=a||[null,t({}),t([]),t(t)];for(var o=2&r&&e;"object"==typeof o&&!~a.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,d.d(f,c),f},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({41:"f86baf2c",48:"a94703ab",54:"dbc1d98b",93:"3aaaf183",98:"a7bd4aaa",108:"82ddc0cb",116:"1d811208",125:"7a070841",142:"c54e7dfd",211:"5c2ff684",248:"1d8d4d66",256:"72d756b8",318:"d9a77650",347:"d883f166",348:"1b584481",358:"dce8346b",360:"e2b776f6",386:"fd06342f",389:"107e5c96",401:"17896441",481:"811590cc",571:"e3985b5e",581:"935f2afb",603:"4fa8333f",610:"f4ed739a",616:"5690b692",633:"57bf3c3e",634:"c4f5d8e4",635:"24e9c654",647:"5e95c892",677:"3ac9c775",727:"05b5f383",760:"4076c496",761:"ba3e2977",865:"9320ba18",874:"d436088f",882:"42ed737c",903:"f8409a7e",933:"11b75873",936:"98e27211",940:"686f8a5c",944:"fbf9df28",969:"14eb3368",977:"61341f23",995:"06213a2c"}[e]||e)+"."+{41:"82917f1b",48:"50fa13a7",54:"a668a9b2",93:"836d0400",98:"bf4babd6",108:"bf883e46",116:"6f4256a4",125:"e6ab3505",142:"9167e39a",211:"ce2733ee",248:"a1150de7",256:"364b8592",318:"12579ca8",347:"12e654e1",348:"60a7a5d8",358:"c3dec14f",360:"cb967bac",386:"8fd891fc",389:"bf156dfb",401:"7258e58c",481:"ac392f5c",560:"acb36320",571:"e8f439e6",581:"e9b33cbe",603:"b4ff724b",610:"a11c93c5",616:"21813653",633:"12158026",634:"d932c939",635:"87547857",647:"4567f33d",677:"6783da97",727:"e46d1248",760:"2e4bb300",761:"ada73e00",865:"cc0968aa",874:"c10a184e",882:"3fe7393a",903:"226bd0f7",904:"3a29f483",933:"c5f1bf2a",936:"f9a1ddca",940:"1778a0d6",944:"1981ba08",969:"41cbbd0a",977:"06468a31",995:"8d8d3af8"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},f="aggregation-pipeline-workshop:",d.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var o,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(s);var f=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),f&&f.forEach((e=>e(t))),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),n&&document.head.appendChild(o)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/aggregation-pipeline-lab/",d.gca=function(e){return e={17896441:"401",f86baf2c:"41",a94703ab:"48",dbc1d98b:"54","3aaaf183":"93",a7bd4aaa:"98","82ddc0cb":"108","1d811208":"116","7a070841":"125",c54e7dfd:"142","5c2ff684":"211","1d8d4d66":"248","72d756b8":"256",d9a77650:"318",d883f166:"347","1b584481":"348",dce8346b:"358",e2b776f6:"360",fd06342f:"386","107e5c96":"389","811590cc":"481",e3985b5e:"571","935f2afb":"581","4fa8333f":"603",f4ed739a:"610","5690b692":"616","57bf3c3e":"633",c4f5d8e4:"634","24e9c654":"635","5e95c892":"647","3ac9c775":"677","05b5f383":"727","4076c496":"760",ba3e2977:"761","9320ba18":"865",d436088f:"874","42ed737c":"882",f8409a7e:"903","11b75873":"933","98e27211":"936","686f8a5c":"940",fbf9df28:"944","14eb3368":"969","61341f23":"977","06213a2c":"995"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var f=new Promise(((t,f)=>r=e[a]=[t,f]));t.push(r[2]=f);var c=d.p+d.u(a),o=new Error;d.l(c,(t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var f=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+a+" failed.\n("+f+": "+c+")",o.name="ChunkLoadError",o.type=f,o.request=c,r[1](o)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,f,c=t[0],o=t[1],n=t[2],b=0;if(c.some((a=>0!==e[a]))){for(r in o)d.o(o,r)&&(d.m[r]=o[r]);if(n)var i=n(d)}for(a&&a(t);b{"use strict";var e,a,t,r,f,o={},c={};function d(e){var a=c[e];if(void 0!==a)return a.exports;var t=c[e]={exports:{}};return o[e].call(t.exports,t,t.exports,d),t.exports}d.m=o,e=[],d.O=(a,t,r,f)=>{if(!t){var o=1/0;for(i=0;i=f)&&Object.keys(d.O).every((e=>d.O[e](t[n])))?t.splice(n--,1):(c=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[t,r,f]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);d.r(f);var o={};a=a||[null,t({}),t([]),t(t)];for(var c=2&r&&e;"object"==typeof c&&!~a.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,d.d(f,o),f},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,t)=>(d.f[t](e,a),a)),[])),d.u=e=>"assets/js/"+({41:"f86baf2c",48:"a94703ab",54:"dbc1d98b",93:"3aaaf183",98:"a7bd4aaa",108:"82ddc0cb",116:"1d811208",125:"7a070841",142:"c54e7dfd",211:"5c2ff684",248:"1d8d4d66",256:"72d756b8",318:"d9a77650",347:"d883f166",348:"1b584481",358:"dce8346b",360:"e2b776f6",386:"fd06342f",389:"107e5c96",401:"17896441",481:"811590cc",571:"e3985b5e",581:"935f2afb",603:"4fa8333f",610:"f4ed739a",616:"5690b692",633:"57bf3c3e",634:"c4f5d8e4",635:"24e9c654",647:"5e95c892",677:"3ac9c775",727:"05b5f383",760:"4076c496",761:"ba3e2977",865:"9320ba18",874:"d436088f",882:"42ed737c",903:"f8409a7e",933:"11b75873",936:"98e27211",940:"686f8a5c",944:"fbf9df28",969:"14eb3368",977:"61341f23",995:"06213a2c"}[e]||e)+"."+{41:"82917f1b",48:"50fa13a7",54:"a668a9b2",93:"836d0400",98:"bf4babd6",108:"bf883e46",116:"6f4256a4",125:"e6ab3505",142:"9167e39a",211:"ce2733ee",248:"a1150de7",256:"364b8592",318:"12579ca8",347:"12e654e1",348:"60a7a5d8",358:"c3dec14f",360:"cb967bac",386:"8fd891fc",389:"bf156dfb",401:"7258e58c",481:"ac392f5c",560:"acb36320",571:"b1dc4533",581:"53675f54",603:"b4ff724b",610:"a11c93c5",616:"21813653",633:"12158026",634:"d932c939",635:"87547857",647:"4567f33d",677:"6783da97",727:"e46d1248",760:"2e4bb300",761:"ada73e00",865:"cc0968aa",874:"c10a184e",882:"3fe7393a",903:"226bd0f7",904:"3a29f483",933:"c5f1bf2a",936:"f9a1ddca",940:"1778a0d6",944:"1981ba08",969:"41cbbd0a",977:"06468a31",995:"8d8d3af8"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},f="aggregation-pipeline-workshop:",d.l=(e,a,t,o)=>{if(r[e])r[e].push(a);else{var c,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(s);var f=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),f&&f.forEach((e=>e(t))),a)return a(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),n&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/aggregation-pipeline-lab/",d.gca=function(e){return e={17896441:"401",f86baf2c:"41",a94703ab:"48",dbc1d98b:"54","3aaaf183":"93",a7bd4aaa:"98","82ddc0cb":"108","1d811208":"116","7a070841":"125",c54e7dfd:"142","5c2ff684":"211","1d8d4d66":"248","72d756b8":"256",d9a77650:"318",d883f166:"347","1b584481":"348",dce8346b:"358",e2b776f6:"360",fd06342f:"386","107e5c96":"389","811590cc":"481",e3985b5e:"571","935f2afb":"581","4fa8333f":"603",f4ed739a:"610","5690b692":"616","57bf3c3e":"633",c4f5d8e4:"634","24e9c654":"635","5e95c892":"647","3ac9c775":"677","05b5f383":"727","4076c496":"760",ba3e2977:"761","9320ba18":"865",d436088f:"874","42ed737c":"882",f8409a7e:"903","11b75873":"933","98e27211":"936","686f8a5c":"940",fbf9df28:"944","14eb3368":"969","61341f23":"977","06213a2c":"995"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var f=new Promise(((t,f)=>r=e[a]=[t,f]));t.push(r[2]=f);var o=d.p+d.u(a),c=new Error;d.l(o,(t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var f=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;c.message="Loading chunk "+a+" failed.\n("+f+": "+o+")",c.name="ChunkLoadError",c.type=f,c.request=o,r[1](c)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,f,o=t[0],c=t[1],n=t[2],b=0;if(o.some((a=>0!==e[a]))){for(r in c)d.o(c,r)&&(d.m[r]=c[r]);if(n)var i=n(d)}for(a&&a(t);b
-
+
diff --git a/docs/category/exporting-data.html b/docs/category/exporting-data.html
index 39e1a79..2321bcf 100644
--- a/docs/category/exporting-data.html
+++ b/docs/category/exporting-data.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/grouping-results.html b/docs/category/grouping-results.html
index d52ade7..cfbcbb5 100644
--- a/docs/category/grouping-results.html
+++ b/docs/category/grouping-results.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/lookups--joins.html b/docs/category/lookups--joins.html
index 9192131..1799a41 100644
--- a/docs/category/lookups--joins.html
+++ b/docs/category/lookups--joins.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/modifying-results.html b/docs/category/modifying-results.html
index 5d7141c..ff55b20 100644
--- a/docs/category/modifying-results.html
+++ b/docs/category/modifying-results.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/prerequisites.html b/docs/category/prerequisites.html
index c728eeb..debf3ef 100644
--- a/docs/category/prerequisites.html
+++ b/docs/category/prerequisites.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/simple-pipelines.html b/docs/category/simple-pipelines.html
index 8fdfd38..e58f417 100644
--- a/docs/category/simple-pipelines.html
+++ b/docs/category/simple-pipelines.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/the-aggregation-pipeline.html b/docs/category/the-aggregation-pipeline.html
index 5bd44b3..f26516f 100644
--- a/docs/category/the-aggregation-pipeline.html
+++ b/docs/category/the-aggregation-pipeline.html
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/category/using-arrays.html b/docs/category/using-arrays.html
index 8946f1f..a32983a 100644
--- a/docs/category/using-arrays.html
+++ b/docs/category/using-arrays.html
@@ -7,10 +7,10 @@
-
+
-