$round(集計)
定義
$round
$round
は、数値を整数または指定された小数点以下の桁に四捨五入します。$round
の構文は次のとおりです。{ $round : [ <number>, <place> ] } フィールドタイプ説明<number>
数値数値に変換される有効な式であればどれでもかまいません。 具体的には、式は整数、double、
decimal
、またはlong
に変換される必要があります。$round
式が数値以外のデータ型に解決された場合はエラーを返します。<place>
integer任意 -20から100までの整数(排他的)に変換される有効な 式であればどれでもかまいません。例
-20 < place < 100
。指定しない場合、デフォルトは0
です。<place>
が正の整数に解決される場合、$round
は小数点以下<place>
桁に丸められます。たとえば、
$round : [1234.5678, 2]
小数点以下2桁に丸められ、1234.57
が返されます。<place>
が負の整数に解決される場合、$round
では小数点の左側の数字<place>
を使用して丸められます。たとえば、
$round : [1234.5678, -2]
は小数点の左側にある2桁目(3
)を使用し、1200
を返します。<place>
の絶対値が小数点の左側の桁数に等しいかそれを超える場合、$round
は0
を返します。たとえば、
$round : [ 1234.5678, -4]
小数点の左側の4番目の桁を指定します。これは小数の左の桁数に等しく、0
を返します。<place>
が0
に解決される場合、$round
は小数点の右側の最初の桁を使用して丸め、丸められた整数値を返します。たとえば、
$round : [1234.5678, 0]
は1235
を返します。
動作
偶数値への丸め
値5
が丸められる場合、 $round
では最も近い偶数値に丸められます。例えば、次のサンプル ドキュメントについて考えてみます。
{_id : 1, "value" : 10.5}, {_id : 2, "value" : 11.5}, {_id : 3, "value" : 12.5}, {_id : 4, "value" : 13.5}
$round : [ "$value", 0]
は以下を返します。
{_id : 1, "value" : 10}, {_id : 2, "value" : 12}, {_id : 3, "value" : 12}, {_id : 4, "value" : 14}
値 10.5
は偶数値 10
に最も近い値であり、値 11.5
と 12.5
は偶数値 12
に最も近い値です。最も近い偶数値に丸めると、四捨五入されたデータが、通常の切り上げまたは切り捨てよりも均等に分散されます。
返されるデータ型
返されるデータ型は、入力式または値のデータ型と一致します。
null
、NaN
、+/- Infinity
最初の引数が
null
の値に解決されるか、欠落しているフィールドを参照している場合、$round
はnull
を返します。最初の引数が
NaN
に解決された場合、$round
NaN
を返します。最初の引数が負の無限大または正の無限大に解決された場合、
$round
それぞれ負の無限大または正の無限大を返します。
例 | 結果 |
---|---|
{ $round: [ NaN, 1] } | NaN |
{ $round: [ null, 1] } | null |
{ $round : [ Infinity, 1 ] } | Infinity |
{ $round : [ -Infinity, 1 ] } | -Infinity |
例
次のドキュメントを含むsamples
という名前のコレクションを作成します。
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.39 } ] )
次の集計は、
value
を小数第1位で丸めたものを返します。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 } 次の集計は、小数点の左側の最初の桁を使用して丸められた
value
を返します。db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", -1 ] } } } ]) この操作は次の結果を返します。
{ "_id" : 1, "roundedValue" : 10 } { "_id" : 2, "roundedValue" : 20 } { "_id" : 3, "roundedValue" : 30 } { "_id" : 4, "roundedValue" : -50 } 次の集計では、整数に丸められた
value
が返されます。db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 0 ] } } } ]) この操作は次の結果を返します。
{ "_id" : 1, "roundedValue" : 19 } { "_id" : 2, "roundedValue" : 29 } { "_id" : 3, "roundedValue" : 34 } { "_id" : 4, "roundedValue" : -45 }