MongoDB $round运算符
MongoDB中的$round
运算符是什么
MongoDB提供了多种算术表达式运算符。$round
运算符是其中之一。该运算符用于将一个数字四舍五入到整数或指定的小数位数。
$round
运算符的语法
{ $round : [ < number >, < place > ] }
重要点:
<number>
可以是任何有效的表达式,直到解析为数字。<number>
的值必须是整数、双精度、十进制或长整型。如果<number>
不是非数值数据类型,则返回错误。<place>
可以是任何有效的可选表达式,解析为介于-20到100之间的整数。<place>
字段的以下条件是适用的:
条件 | 示例 | 输出 |
---|---|---|
如果<place> 解析为正整数,则会将小数侧的值四舍五入。 |
$round: [7896.1479, 3] | 7896.15 |
如果<place> 解析为负整数,则会将小数点左侧的<place> 位数字四舍五入。 |
$round: [7843.1479, -2] | 7800 |
如果<place> 的绝对值大于或等于小数点左侧的数字个数,则返回0。 |
$round: [7875.1479, -5] | 0 |
如果<place> 解析为0,则会将小数点右侧第一个数字四舍五入,并返回四舍五入后的整数值。 |
$round: [7894.9879, 0] | 7894 |
示例
假设我们有以下文档的产品集合。
{
{
"_id" : 1,
"name" : "pen",
"data" : 11.29
}
{
"_id" : 2,
"name" : "pencil",
"data" : 10.32
}
{
"_id" : 3,
"name" : "box",
"data" : 15.97
}
{
"_id" : 4,
"name" : "bottle",
"data" : -12.38
}
{
"_id" : 5,
"name" : "oval",
"data" : 20.88
}
{
"_id" : 6,
"name" : "triangle",
"data" : 5
}
{
"_id" : 7,
"name" : "bottle",
"data" : -1
}
}
示例1
在这个示例中,我们使用$round操作符将数据字段中的值四舍五入。
db.products.aggregate (
[
{
project : {
data : 1,
value : {round : ["$data"]}
}
}
]
)
输出:
{
"_id" : 1,
"data" : 11.29,
"value" : 11
}
{
"_id" : 2,
"data" : 10.32,
"value" : 10
}
{
"_id" : 3,
"data" : 15.97,
"value" : 16
}
{
"_id" : 4,
"data" : -12.38,
"value" : -12
}
{
"_id" : 5,
"data" : 20.88,
"value" : 21
}
{
"_id" : 6,
"data" : 5,
"value" : 5
}
{
"_id" : 7,
"data" : -1,
"value" : -1
}
示例2:指定小数位
我们可以使用第二个参数来指定要舍入的小数位数。在此示例中,我们使用$round操作符来舍入数据字段中的值。
db.products.aggregate (
[
{
project : {
data : 1,
value : {round : ["$data", 1]}
}
}
]
)
输出:
{
"_id" : 1,
"data" : 11.29,
"value" : 11.3
}
{
"_id" : 2,
"data" : 10.32,
"value" : 10.3
}
{
"_id" : 3,
"data" : 15.97,
"value" : 16
}
{
"_id" : 4,
"data" : -12.38,
"value" : -12.4
}
{
"_id" : 5,
"data" : 20.88,
"value" : 20.9
}
{
"_id" : 6,
"data" : 5,
"value" : 5
}
{
"_id" : 7,
"data" : -1,
"value" : -1
}
假设我们将以下文档添加到我们的集合中:
{
{
"_id" : 8,
"name" : "charge",
"data" : 8611.1325
}
{
"_id" : 9,
"name" : "pen",
"data" : 1843.5632
}
{
"_id" : 10,
"name" : "chart",
"data" : 5714.1397
}
{
"_id" : 11,
"name" : "glass",
"data" : 2312.3012
}
}
示例3:负小数位数
在这个示例中,我们使用$round操作符来将数据字段的值四舍五入为不同的负小数位数。
db.products.aggregate(
[
{ match: { _id: {in: [ 8, 9, 10, 11 ] } } },
{
project:
{
data : 1,
value_1 : {round [ "data", -1 ] },
value_2 : {round [ "$data", -2 ] },
}
}
]
).pretty()
输出:
{
"_id" : 8,
"data" : 8611.1325,
"value_1" : 8610,
"value_2" : 8600
}
{
"_id" : 9,
"data" : 1843.5632,
"value_1" : 1840,
"value_2" : 1800
}
{
"_id" : 10,
"data" : 5714.1397,
"value_1" : 5710,
"value_2" : 5700
}
{
"_id" : 11,
"data" : 2312.3012,
"value_1" : 2310,
"value_2" : 2300,
}
**示例 4: <Place>
的值为零 **
当<place>
字段的值为0时,$round
运算符会将小数点右侧的第一个数字四舍五入,并返回四舍五入后的值。在这个示例中,我们使用$round
运算符来四舍五入数据字段中的值。
db.products.aggregate (
[
{
project : {
data : 1,
value : {round : ["$data", 0]}
}
}
]
)
输出:
{
"_id" : 1,
"data" : 11.29,
"value" : 11
}
{
"_id" : 2,
"data" : 10.32,
"value" : 10
}
{
"_id" : 3,
"data" : 15.97,
"value" : 16
}
{
"_id" : 4,
"data" : -12.38,
"value" : -12
}
{
"_id" : 5,
"data" : 20.88,
"value" : 21
}
{
"_id" : 6,
"data" : 5,
"value" : 5
}
{
"_id" : 7,
"data" : -1,
"value" : -1
}
{
"_id" : 8,
"data" : 8611.1325,
"value" : 8611
}
{
"_id" : 9,
"data" : 1843.5632,
"value" : 1843
}
{
"_id" : 10,
"data" : 5714.1397,
"value" : 5714
}
{
"_id" : 11,
"data" : 2312.3012,
"value" : 2312
}