On this page本页内容
The examples in this document use the 本文中的示例使用zipcodes
collection.zipcodes
集合。This collection is available at: media.mongodb.org/zips.json.此系列可从以下网址获得:media.mongodb.org/zips.json。Use 使用mongoimport
to load this data set into your mongod
instance.mongoimport
将此数据集加载到mongod
实例中。
Each document in the zipcodes
collection has the following form:zipcodes
集合中的每个文档都有以下格式:
_id
field holds the zip code as a string._id
字段将邮政编码保存为字符串。city
field holds the city name.city
字段保存城市名称。state
field holds the two letter state abbreviation.state
字段包含两个字母的state缩写。pop
field holds the population.loc
field holds the location as a longitude latitude pair.aggregate()
All of the following examples use the aggregate()
helper in the mongo
shell.
The aggregate()
method uses the aggregation pipeline to process documents into aggregated results. An aggregation pipeline consists of stages with each stage processing the documents as they pass along the pipeline. Documents pass through the stages in sequence.
The aggregate()
method in the mongo
shell provides a wrapper around the aggregate
database command. See the documentation for your driver for a more idiomatic interface for data aggregation operations.
The following aggregation operation returns all states with total population greater than 10 million:以下聚合操作返回总人口大于1000万的所有状态:
In this example, the aggregation pipeline consists of the $group
stage followed by the $match
stage:
$group
stage groups the documents of the zipcode
collection by the state
field, calculates the totalPop
field for each state, and outputs a document for each unique state.
The new per-state documents have two fields: the _id
field and the totalPop
field. The _id
field contains the value of the state
; i.e. the group by field. The totalPop
field is a calculated field that contains the total population of each state. To calculate the value, $group
uses the $sum
operator to add the population field (pop
) for each state.
After the $group
stage, the documents in the pipeline resemble the following:
$match
stage filters these grouped documents to output only those documents whose totalPop
value is greater than or equal to 10 million. The $match
stage does not alter the matching documents but outputs the matching documents unmodified.The equivalent SQL for this aggregation operation is:
The following aggregation operation returns the average populations for cities in each state:
In this example, the aggregation pipeline consists of the $group
stage followed by another $group
stage:
$group
stage groups the documents by the combination of city
and state
, uses the $sum
expression to calculate the population for each combination, and outputs a document for each city
and state
combination. [1]
After this stage in the pipeline, the documents resemble the following:
$group
stage groups the documents in the pipeline by the _id.state
field (i.e. the state
field inside the _id
document), uses the $avg
expression to calculate the average city population (avgCityPop
) for each state, and outputs a document for each state.The documents that result from this aggregation operation resembles the following:
The following aggregation operation returns the smallest and largest cities by population for each state:
In this example, the aggregation pipeline consists of a $group
stage, a $sort
stage, another $group
stage, and a $project
stage:
$group
stage groups the documents by the combination of the city
and state
, calculates the sum
of the pop
values for each combination, and outputs a document for each city
and state
combination.
At this stage in the pipeline, the documents resemble the following:
$sort
stage orders the documents in the pipeline by the pop
field value, from smallest to largest; i.e. by increasing order. This operation does not alter the documents.$group
stage groups the now-sorted documents by the _id.state
field (i.e. the state
field inside the _id
document) and outputs a document for each state.
The stage also calculates the following four fields for each state. Using the $last
expression, the $group
operator creates the biggestCity
and biggestPop
fields that store the city with the largest population and that population. Using the $first
expression, the $group
operator creates the smallestCity
and smallestPop
fields that store the city with the smallest population and that population.
The documents, at this stage in the pipeline, resemble the following:
$project
stage renames the _id
field to state
and moves the biggestCity
, biggestPop
, smallestCity
, and smallestPop
into biggestCity
and smallestCity
embedded documents.The output documents of this aggregation operation resemble the following:
[1] | A city can have more than one zip code associated with it as different sections of the city can each have a different zip code. |