$minN
New from version 8.0.1.
The $minN operator in Amazon DocumentDB returns the N smallest values. When used as an accumulator in a $group stage, it returns an array of the N minimum values in each group. When used as an array expression operator, it returns the N minimum elements of an array.
Parameters
-
input: An expression that resolves to the array or field from which to return the minimumnvalues. -
n: An expression that resolves to a positive integer specifying how many minimum values to return.
Behavior
Array expression operator behavior
-
You cannot specify a value of
nless than1. -
$minNfilters outnullvalues found in theinputarray. -
If the specified
nis greater than or equal to the number of elements in theinputarray,$minNreturns all elements in theinputarray. -
If
inputresolves to a non-array value, the aggregation operation errors. -
If
inputcontains both numeric and string elements, the numeric elements are sorted before string elements according to the BSON comparison order.
Accumulator behavior
-
When used as an accumulator,
nmust be a positive integral expression that is either a constant or depends on the_idvalue for$group. -
$minNfilters out null and missing values. -
If the group contains fewer than
nelements,$minNreturns all elements in the group. -
$minNcompares input data following the BSON comparison order to determine the appropriate output type. When the input data contains multiple data types, the$minNoutput type is the lowest in the comparison order.
Output ordering
$minN returns values in no particular sort order. If guaranteeing a particular sort order is a requirement, use $bottomN instead, or wrap the result with $sortArray.
Example (MongoDB Shell)
The following example demonstrates the use of the $minN accumulator to retrieve the two lowest scores for each subject.
Create sample documents
db.scores.insertMany([ { subject: "math", score: 85 }, { subject: "math", score: 72 }, { subject: "math", score: 93 }, { subject: "math", score: 68 }, { subject: "science", score: 90 }, { subject: "science", score: 78 }, { subject: "science", score: 65 }, { subject: "science", score: 88 } ]);
Query example
db.scores.aggregate([ { $group: { _id: "$subject", lowestTwo: { $minN: { input: "$score", n: 2 } } } } ]);
Output
[
{ "_id": "math", "lowestTwo": [72, 68] },
{ "_id": "science", "lowestTwo": [78, 65] }
]
Expression usage example (MongoDB Shell)
The $minN operator can also be used as an expression within a $project stage to return the N smallest elements from an array field.
Create sample documents
db.readings.insertMany([ { _id: 1, sensor: "A", values: [45, 12, 78, 3, 56] }, { _id: 2, sensor: "B", values: [90, 23, 67, 11, 44] } ]);
Query example
db.readings.aggregate([ { $project: { lowestThree: { $minN: { input: "$values", n: 3 } } }} ]);
Output
[
{ "_id": 1, "lowestThree": [45, 12, 3] },
{ "_id": 2, "lowestThree": [44, 23, 11] }
]
Code examples
To view a code example for using the $minN operator, choose the tab for the language that you want to use. The following examples show both accumulator usage (in $group) and expression usage (in $project):