$round (aggregation)
定義
$round
$round
rounds a number to a whole integer or to a specified decimal place.$round
の構文は次のとおりです。{ $round : [ <number>, <place> ] } フィールドタイプ説明<number>
数値
<place>
integer
任意 Can be any valid 式 that resolves to an integer between -20 and 100, exclusive. e.g.
-20 < place < 100
. Defaults to0
if unspecified.If
<place>
resolves to a positive integer,$round
rounds to<place>
decimal places.たとえば、
$round : [1234.5678, 2]
rounds to two decimal places and returns1234.57
.If
<place>
resolves to a negative integer,$round
rounds using the digit<place>
to the left of the decimal.たとえば、
$round : [1234.5678, -2]
uses the 2nd digit to the left of the decimal (3
) and returns1200
.If the absolute value of
<place>
equals or exceeds the number of digits to the left of the decimal,$round
returns0
.たとえば、
$round : [ 1234.5678, -4]
specifies the fourth digit to the left of the decimal. This equals the number of digits left of the decimal and returns0
.If
<place>
resolves to0
,$round
rounds using the first digit to the right of the decimal and returns rounded integer value.たとえば、
$round : [1234.5678, 0]
は1235
.
動作
Rounding to Even Values
When rounding on a value of 5
, $round
rounds to the
nearest even value. For example, consider the following sample
documents:
{_id : 1, "value" : 10.5}, {_id : 2, "value" : 11.5}, {_id : 3, "value" : 12.5}, {_id : 4, "value" : 13.5}
$round : [ "$value", 0]
returns the following:
{_id : 1, "value" : 10}, {_id : 2, "value" : 12}, {_id : 3, "value" : 12}, {_id : 4, "value" : 14}
The value 10.5
is closest to the even value 10
, while the values
11.5
and 12.5
are closest to the even value 12
. Rounding to
the nearest even value supports more even distribution of rounded data
than always rounding up or down.
Returned Data Type
The returned data type matches the data type of the input expression or value.
null
、NaN
、+/- Infinity
If the first argument resolves to a value of
null
or refers to a field that is missing,$round
returnsnull
.If the first argument resolves to
NaN
,$round
returnsNaN
.If the first argument resolves to negative or positive infinity,
$round
returns negative or positive infinity respectively.
例 | 結果 |
---|---|
|
|
|
|
|
|
|
|
例
次のドキュメントを含むsamples
という名前のコレクションを作成します。
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.39 } ] )
The following aggregation returns
value
rounded to the first decimal place:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 1 ] } } } ]) この操作は次の結果を返します。
{ "_id" : 1, "roundedValue" : 19.2 } { "_id" : 2, "roundedValue" : 28.7 } { "_id" : 3, "roundedValue" : 34.3 } { "_id" : 4, "roundedValue" : -45.4 } The following aggregation returns
value
rounded using the first digit to the left of the decimal:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", -1 ] } } } ]) この操作は次の結果を返します。
{ "_id" : 1, "roundedValue" : 10 } { "_id" : 2, "roundedValue" : 20 } { "_id" : 3, "roundedValue" : 30 } { "_id" : 4, "roundedValue" : -50 } The following aggregation returns
value
rounded to the whole integer:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 0 ] } } } ]) この操作は次の結果を返します。
{ "_id" : 1, "roundedValue" : 19 } { "_id" : 2, "roundedValue" : 29 } { "_id" : 3, "roundedValue" : 34 } { "_id" : 4, "roundedValue" : -45 }