Skip to content

Commit 1cb3de7

Browse files
committed
DOCSP-50497 redo file deletion and new pull req with correct c# reference
1 parent 1751141 commit 1cb3de7

File tree

2 files changed

+361
-207
lines changed

2 files changed

+361
-207
lines changed

source/aggregation.txt

Lines changed: 122 additions & 207 deletions
Original file line numberDiff line numberDiff line change
@@ -14,245 +14,160 @@ Aggregation
1414

1515
.. contents:: On this page
1616
:local:
17+
1718
:backlinks: none
1819
:depth: 2
1920
:class: singlecol
2021

2122
.. toctree::
2223

24+
Pipeline Stages </aggregation/pipeline-stages>
2325
Filtered Subset </aggregation/filtered-subset/>
2426
Group & Total </aggregation/group-total/>
2527
Unpack Arrays & Group </aggregation/unpack-arrays/>
2628
One-to-One Join </aggregation/one-to-one-join/>
2729
Multi-Field Join </aggregation/multi-field-join/>
28-
30+
2931
.. _nodejs-aggregation-overview:
3032

3133
Overview
3234
--------
3335

34-
In this guide, you can learn how to use **aggregation operations** in
35-
the MongoDB Node.js driver.
36+
In this guide, you can learn how to use the MongoDB Node.js Driver to perform
37+
**aggregation operations**.
3638

37-
Aggregation operations are expressions you can use to produce reduced
38-
and summarized results in MongoDB. MongoDB's aggregation framework
39-
allows you to create a pipeline that consists of one or more stages,
40-
each of which performs a specific operation on your data.
39+
Aggregation operations process data in your MongoDB collections and return
40+
computed results. The MongoDB Aggregation framework is modeled on the
41+
concept of data processing pipelines. Documents enter a pipeline comprised of one or
42+
more stages, and this pipeline transforms the documents into an aggregated result.
43+
44+
To learn more about the aggregation stages supported by the Node.js Driver, see :ref:`Aggregation Stages <>`.
45+
.. todo-- add link here
4146

4247
Analogy
4348
~~~~~~~
4449

45-
You can think of the aggregation pipeline as similar to an automobile factory.
46-
Automobile manufacturing requires the use of assembly stations organized
47-
into assembly lines. Each station has specialized tools, such as
48-
drills and welders. The factory transforms and
49-
assembles the initial parts and materials into finished products.
50-
51-
The **aggregation pipeline** is the assembly line, **aggregation
52-
stages** are the assembly stations, and **expression operators** are the
53-
specialized tools.
54-
55-
Comparing Aggregation and Query Operations
56-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57-
58-
Using query operations, such as the ``find()`` method, you can perform the following actions:
59-
60-
- Select *which documents* to return
61-
- Select *which fields* to return
62-
- Sort the results
63-
64-
Using aggregation operations, you can perform the following actions:
65-
66-
- Perform all query operations
67-
- Rename fields
68-
- Calculate fields
69-
- Summarize data
70-
- Group values
71-
72-
Aggregation operations have some :manual:`limitations </core/aggregation-pipeline-limits/>`:
73-
74-
- Returned documents must not violate the :manual:`BSON-document size limit </reference/limits/#mongodb-limit-BSON-Document-Size>`
50+
The aggregation pipeline is similar to an automobile factory assembly line. An
51+
assembly lines has stations with specialized tools that are used to perform
52+
specific tasks. For example, when building a car, the assembly line begins with
53+
a frame. As the car frame moves though the assembly line, each station adds a
54+
new part. The factory transforms and assembles the initial parts, resulting in
55+
finished cars.
56+
57+
The *aggregation pipeline* is the assembly line, the *aggregation stages* are
58+
the assembly stations, and the *expression operators* are the specialized tools.
59+
60+
Compare Aggregation and Find Operations
61+
---------------------------------------
62+
63+
The following table lists the different tasks you can perform with find
64+
operations compared to what you can achieve with aggregation
65+
operations. The aggregation framework provides expanded functionality
66+
that allows you to transform and manipulate your data.
67+
68+
.. list-table::
69+
:header-rows: 1
70+
:widths: 50 50
71+
72+
* - Find Operations
73+
- Aggregation Operations
74+
75+
* - | Select *certain* documents to return
76+
| Select *which* fields to return
77+
| Sort the results
78+
| Limit the results
79+
| Count the results
80+
- | Select *certain* documents to return
81+
| Select *which* fields to return
82+
| Sort the results
83+
| Limit the results
84+
| Count the results
85+
| Group the results
86+
| Rename fields
87+
| Compute new fields
88+
| Summarize data
89+
| Connect and merge data sets
90+
91+
Server Limitations
92+
------------------
93+
94+
Consider the following :manual:`limitations </core/aggregation-pipeline-limits/>` when performing aggregation operations:
95+
96+
- Returned documents must not violate the :manual:`BSON document size limit </reference/limits/#mongodb-limit-BSON-Document-Size>`
7597
of 16 megabytes.
7698

77-
- Pipeline stages have a memory limit of 100 megabytes by default. You can exceed this
78-
limit by setting the ``allowDiskUse`` property of ``AggregateOptions`` to ``true``. See
79-
the `AggregateOptions API documentation <{+api+}/interfaces/AggregateOptions.html>`__
80-
for more details.
81-
82-
.. important:: $graphLookup exception
83-
84-
The :manual:`$graphLookup
85-
</reference/operator/aggregation/graphLookup/>` stage has a strict
86-
memory limit of 100 megabytes and will ignore ``allowDiskUse``.
87-
88-
References
89-
~~~~~~~~~~
90-
91-
To view a full list of expression operators, see :manual:`Aggregation
92-
Operators </reference/operator/aggregation/>` in the Server manual.
93-
94-
To learn about assembling an aggregation pipeline and view examples, see
95-
:manual:`Aggregation Pipeline </core/aggregation-pipeline/>` in the
96-
Server manual.
97-
98-
To learn more about creating pipeline stages, see :manual:`Aggregation
99-
Stages </reference/operator/aggregation-pipeline/>` in the Server manual.
100-
101-
Runnable Examples
102-
-----------------
103-
104-
The example uses sample data about restaurants. The following code
105-
inserts data into the ``restaurants`` collection of the ``aggregation``
106-
database:
107-
108-
.. literalinclude:: /code-snippets/aggregation/agg.js
109-
:start-after: begin data insertion
110-
:end-before: end data insertion
111-
:language: javascript
112-
:dedent:
113-
114-
.. tip::
115-
116-
For more information on connecting to your MongoDB deployment, see the :doc:`Connection Guide </connect>`.
99+
- Pipeline stages have a memory limit of 100 megabytes by default. If required,
100+
you can exceed this limit by enabling the `AllowDiskUse
101+
<https://mongodb.github.io/node-mongodb-native/6.17/interfaces/AggregateOptions.html#allowDiskUse>`__
102+
property of the ``AggregateOptions`` object that you pass to the
103+
``Aggregate()`` method.
117104

105+
..
118106
Aggregation Example
119-
~~~~~~~~~~~~~~~~~~~
120-
107+
-------------------
108+
..
121109
To perform an aggregation, pass a list of aggregation stages to the
122110
``collection.aggregate()`` method.
123-
124-
In the example, the aggregation pipeline uses the following aggregation stages:
125-
126-
- A :manual:`$match </reference/operator/aggregation/match/>` stage to filter for documents whose
127-
``categories`` array field contains the element ``Bakery``.
128-
129-
- A :manual:`$group </reference/operator/aggregation/group/>` stage to group the matching documents by the ``stars``
130-
field, accumulating a count of documents for each distinct value of ``stars``.
131-
111+
..
112+
.. note::
113+
..
114+
This example uses the ``sample_restaurants.restaurants`` collection
115+
from the :atlas:`Atlas sample datasets </sample-data>`. To learn how to create a
116+
free MongoDB Atlas cluster and load the sample datasets, see the :ref:`Get Started <node-get-started>` guide.
117+
..
118+
The following code example produces a count of the number of bakeries in each borough
119+
of New York City. To do so, the aggregation pipeline uses the following aggregation stages:
120+
..
121+
- A :manual:`$match </reference/operator/aggregation/match/>` stage to filter
122+
for documents whose ``cuisine`` field contains the element ``Bakery``.
123+
..
124+
- A :manual:`$group </reference/operator/aggregation/group/>` stage to group the
125+
matching documents by the ``borough`` field, accumulating a count of documents
126+
for each distinct value in the ``borough`` field.
127+
..
132128
.. literalinclude:: /code-snippets/aggregation/agg.js
133129
:start-after: begin aggregation
134130
:end-before: end aggregation
135131
:language: javascript
136132
:dedent:
137-
133+
..
138134
This example produces the following output:
139-
135+
..
140136
.. code-block:: json
141137
:copyable: false
142-
143-
{ _id: 4, count: 2 }
144-
{ _id: 3, count: 1 }
145-
{ _id: 5, count: 1 }
146-
147-
For more information, see the `aggregate() API documentation <{+api+}/classes/Collection.html#aggregate>`__.
148-
149-
.. _node-aggregation-tutorials-landing:
150-
.. _node-aggregation-tutorials:
151-
152-
Aggregation Tutorials
153-
---------------------
154-
155-
Aggregation tutorials provide detailed explanations of common
156-
aggregation tasks in a step-by-step format. The tutorials are adapted
157-
from examples in the `Practical MongoDB Aggregations book
158-
<https://www.practical-mongodb-aggregations.com/>`__ by Paul Done.
159-
160-
Each tutorial includes the following sections:
161-
162-
- **Introduction**, which describes the purpose and common use cases of the
163-
aggregation type. This section also describes the example and desired
164-
outcome that the tutorial demonstrates.
165-
166-
- **Before You Get Started**, which describes the necessary databases,
167-
collections, and sample data that you must have before building the
168-
aggregation pipeline and performing the aggregation.
169-
170-
- **Tutorial**, which describes how to build and run the aggregation
171-
pipeline. This section describes each stage of the completed
172-
aggregation tutorial, and then explains how to run and interpret the
173-
output of the aggregation.
174-
175-
At the end of each aggregation tutorial, you can find a link to a fully
176-
runnable Node.js code file that you can run in your environment.
177-
178-
.. tip::
179-
180-
To learn more about performing aggregations, see the
181-
:ref:`node-aggregation` guide.
182-
183-
.. _node-agg-tutorial-template-app:
184-
185-
Aggregation Template App
186-
~~~~~~~~~~~~~~~~~~~~~~~~
187-
188-
Before you begin following an aggregation tutorial, you must set up a
189-
new Node.js app. You can use this app to connect to a MongoDB
190-
deployment, insert sample data into MongoDB, and run the aggregation
191-
pipeline in each tutorial.
192-
193-
.. tip::
194-
195-
To learn how to install the driver and connect to MongoDB,
196-
see the :ref:`node-get-started-download-and-install` and
197-
:ref:`node-get-started-create-deployment` steps of the
198-
Quick Start guide.
199-
200-
Once you install the driver, create a file called
201-
``agg_tutorial.js``. Paste the following code in this file to create an
202-
app template for the aggregation tutorials:
203-
204-
.. literalinclude:: /includes/aggregation/template-app.js
205-
:language: javascript
206-
:copyable: true
207-
208-
.. important::
209-
210-
In the preceding code, read the code comments to find the sections of
211-
the code that you must modify for the tutorial you are following.
212-
213-
If you attempt to run the code without making any changes, you will
214-
encounter a connection error.
215-
216-
For every tutorial, you must replace the connection string placeholder with
217-
your deployment's connection string.
218-
219-
.. tip::
220-
221-
To learn how to locate your deployment's connection string, see the
222-
:ref:`node-get-started-connection-string` step of the Quick Start guide.
223-
224-
For example, if your connection string is
225-
``"mongodb+srv://mongodb-example:27017"``, your connection string assignment resembles
226-
the following:
227-
228-
.. code-block:: javascript
229-
:copyable: false
230-
231-
const uri = "mongodb+srv://mongodb-example:27017";
232-
233-
To run the completed file after you modify the template for a
234-
tutorial, run the following command in your shell:
235-
236-
.. code-block:: bash
237-
238-
node agg_tutorial.js
239-
240-
Available Tutorials
241-
~~~~~~~~~~~~~~~~~~~
242-
243-
- :ref:`node-aggregation-filtered-subset`
244-
- :ref:`node-aggregation-group-total`
245-
- :ref:`node-aggregation-arrays`
246-
- :ref:`node-aggregation-one-to-one`
247-
- :ref:`node-aggregation-multi-field`
248-
249-
Additional Examples
250-
~~~~~~~~~~~~~~~~~~~
251-
252-
To view step-by-step explanations of common aggregation tasks, see the
253-
:ref:`node-aggregation-tutorials-landing`.
254-
255-
You can find another aggregation pipeline example in the `Aggregation
256-
Framework with Node.js Tutorial
257-
<https://www.mongodb.com/blog/post/quick-start-nodejs--mongodb--how-to-analyze-data-using-the-aggregation-framework>`_
258-
blog post on the MongoDB website.
138+
..
139+
{ _id = 'Bronx', count = 71 }
140+
{ _id = 'Brooklyn', count = 173 }
141+
{ _id = 'Staten Island', count = 20 }
142+
{ _id = 'Missing', count = 2 }
143+
{ _id = 'Manhattan', count = 221 }
144+
{ _id = 'Queens', count = 204 }
145+
146+
Additional information
147+
----------------------
148+
149+
To view a full list of expression operators, see
150+
:manual:`Aggregation Operators </reference/operator/aggregation/>`.
151+
152+
..
153+
To learn more about assembling an aggregation pipeline and view examples, see
154+
:manual:`Aggregation Pipeline </core/aggregation-pipeline/>`.
155+
..
156+
To learn more about creating pipeline stages and view examples, see
157+
:manual:`Aggregation Stages </reference/operator/aggregation-pipeline/>`.
158+
159+
To learn about explaining MongoDB aggregation operations, see
160+
:manual:`Explain Results </reference/explain-results/>` and
161+
:manual:`Query Plans </core/query-plans/>`.
162+
163+
..
164+
API Documentation
165+
~~~~~~~~~~~~~~~~~
166+
..
167+
For more information about the aggregation operations discussed in this guide, see the
168+
following API documentation:
169+
..
170+
- `Collection() <https://mongodb.github.io/node-mongodb-native/6.17/classes/Collection.html>`__
171+
- `aggregate() <https://mongodb.github.io/node-mongodb-native/6.17/classes/Collection.html#aggregate>`__
172+
- `AggregateOptions <https://mongodb.github.io/node-mongodb-native/6.17/interfaces/AggregateOptions.html>`__
173+
.. try to find $match and $group api links ..

0 commit comments

Comments
 (0)