MongoDBでは、$round 集計パイプライン演算子は、数値を整数または指定された小数点以下の桁数に丸めます。
数値を四捨五入する小数点以下の桁数を指定するオプションがあります。これを行うには、2番目の引数を渡します。最初の引数は丸める数値であり、2番目の(オプションの)引数は丸める小数点以下の桁数です。
例
testというコレクションがあるとします。 次のドキュメントを使用:
{ "_id" : 1, "data" : 8.99 }
{ "_id" : 2, "data" : 8.45 }
{ "_id" : 3, "data" : 8.451 }
{ "_id" : 4, "data" : -8.99 }
{ "_id" : 5, "data" : -8.45 }
{ "_id" : 6, "data" : -8.451 }
{ "_id" : 7, "data" : 8 }
{ "_id" : 8, "data" : 0 }
$roundを使用できます dataの値を丸める演算子 フィールド:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data" ] }
}
}
]
) 結果:
{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8 }
{ "data" : 8.451, "rounded" : 8 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8 }
{ "data" : -8.451, "rounded" : -8 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 } 小数点以下の桁数を指定
2番目の引数を使用して、数値を四捨五入する小数点以下の桁数を指定するオプションがあります。
例:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", 1 ] }
}
}
]
) 結果:
{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8.4 }
{ "data" : 8.451, "rounded" : 8.5 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8.4 }
{ "data" : -8.451, "rounded" : -8.5 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 } 負の小数点以下の桁数
2番目の引数は、-20から100までの整数(排他的)に解決される任意の有効な式にすることができます。したがって、負の小数点以下の桁数を指定できます。
これを行うと、数値は小数点以下の桁数に丸められます。負の整数の絶対値が数値より大きい場合、結果は0になります。 。
コレクションに次のドキュメントを追加するとします。
{ "_id" : 9, "data" : 8111.32 }
{ "_id" : 10, "data" : 8514.321 }
{ "_id" : 11, "data" : 8999.454 }
$roundを適用するときにさまざまな小数点以下の桁数を使用する例を次に示します。 それらのドキュメントへ:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 9, 10, 11 ] } } },
{
$project:
{
_id: 0,
data: 1,
a: { $round: [ "$data", -1 ] },
b: { $round: [ "$data", -2 ] },
c: { $round: [ "$data", -3 ] },
d: { $round: [ "$data", -4 ] },
e: { $round: [ "$data", -5 ] }
}
}
]
).pretty() 結果:
{
"data" : 8111.32,
"a" : 8110,
"b" : 8100,
"c" : 8000,
"d" : 10000,
"e" : 0
}
{
"data" : 8514.321,
"a" : 8510,
"b" : 8500,
"c" : 9000,
"d" : 10000,
"e" : 0
}
{
"data" : 8999.454,
"a" : 9000,
"b" : 9000,
"c" : 9000,
"d" : 10000,
"e" : 0
} ゼロの小数点以下の桁数
0の小数点以下の桁数を指定する場合 、$round 演算子は、小数点の右側の最初の桁を使用して丸め、丸められた整数値を返します。
例:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", 0 ] }
}
}
]
) 結果:
{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8 }
{ "data" : 8.451, "rounded" : 8 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8 }
{ "data" : -8.451, "rounded" : -8 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 }
{ "data" : 8111.32, "rounded" : 8111 }
{ "data" : 8514.321, "rounded" : 8514 }
{ "data" : 8999.454, "rounded" : 8999 } 数値タイプ
丸める数値は、整数、倍精度浮動小数点数、10進数、または長整数に解決される任意の有効な式にすることができます。戻り値は入力値のデータ型と一致します。
したがって、次のドキュメントをコレクションに追加すると、次のようになります。
{ "_id" : 12, "data" : NumberDecimal("128.4585") }
{ "_id" : 13, "data" : NumberDecimal("128.12345678912") }
$roundを適用できます dataに フィールド:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 12, 13 ] } } },
{
$project:
{
_id: 0,
data: 1,
a: { $round: [ "$data", -1 ] },
b: { $round: [ "$data", 0 ] },
c: { $round: [ "$data", 3 ] },
d: { $round: [ "$data", 4 ] },
e: { $round: [ "$data", 5 ] }
}
}
]
).pretty() 結果:
{
"data" : NumberDecimal("128.4585"),
"a" : NumberDecimal("1.3E+2"),
"b" : NumberDecimal("128"),
"c" : NumberDecimal("128.458"),
"d" : NumberDecimal("128.4585"),
"e" : NumberDecimal("128.45850")
}
{
"data" : NumberDecimal("128.12345678912"),
"a" : NumberDecimal("1.3E+2"),
"b" : NumberDecimal("128"),
"c" : NumberDecimal("128.123"),
"d" : NumberDecimal("128.1235"),
"e" : NumberDecimal("128.12346")
} 小数点以下の桁数の四捨五入
2番目の引数がnullの場合 、結果はnullです 。
例:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", null ] }
}
}
]
) 結果:
{ "data" : 8.99, "rounded" : null }
{ "data" : 8.45, "rounded" : null }
{ "data" : 8.451, "rounded" : null } ヌル値の丸め
丸められる値がnullの場合 、結果はnullです 。
次のドキュメントをコレクションに追加するとします。
{ "_id" : 14, "data" : null }
そして、$roundを使用します null値を丸めるには:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 14 ] } } },
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", null ] }
}
}
]
) 結果:
{ "data" : null, "rounded" : null } 丸め無限大
丸められる数値がInfinityの場合 、結果はInfinity 。同様に、-Infinityの場合 、結果は-Infinityです。 。
そのような値を持つ2つのドキュメントを追加しましょう:
{ "_id" : 15, "data" : Infinity }
{ "_id" : 16, "data" : -Infinity } そして、それらを丸めましょう:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 15, 16 ] } } },
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", 2 ] }
}
}
]
) 結果:
{ "data" : Infinity, "rounded" : Infinity }
{ "data" : -Infinity, "rounded" : -Infinity } 丸めNaN
NaNの丸め 結果はNaN 。
db.test.aggregate(
[
{ $match: { _id: { $in: [ 1, 2 ] } } },
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data" * 2 ] }
}
}
]
) 結果:
{ "data" : 8.99, "rounded" : NaN }
{ "data" : 8.45, "rounded" : NaN } 非数値タイプ
間違ったデータ型の値(つまり、整数、double、10進数、またはlongではない)を丸めようとすると、エラーが返されます。
コレクションに次のドキュメントを追加するとします。
{ "_id" : 17, "data" : "Thirty five" }
そして今、dataを丸めようとしています フィールド:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 17 ] } } },
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data" ] }
}
}
]
) 結果:
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "$round only supports numeric types, not string",
"code" : 51081,
"codeName" : "Location51081"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:639:17
example@sqldat.com/mongo/shell/assert.js:729:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1058:12
@(shell):1:1