MongoDB聚合运算符:$trunc
文章目录
- [MongoDB聚合运算符:trunc](#MongoDB聚合运算符:trunc)
$trunc
聚合运算符用于将数字截断为整数或指定的小数位。
语法
js
{ $trunc : [ <number>, <place> ] }
参数字段
<numer>
:数值类型,可以是任何能够解析为数值的表达式,比如是整数、双精度数、小数或长整数。如果解析为非表达式,则返回错误。<place>
:整数,可选字段,可以是任何可被解析为整数的表达式,必须在-20到100之间,也就是:-20< place < 100
,如果不指定,缺省值为0。- 如果
<place>
被解析为正整数,$trunc
四舍五入到<place>
小数位。如:$trunc: [1234.5678, 2]
保留两位小数,返回1234.56
。 - 如果
<place>
解析为一个负整数,$trunc
使用小数点左边的数字<place>
进行截取。例如$trunc : [1234.5678, -2]
应用到小数点左边的第二位数字 (3) 并返回1200
。如果<place>
的绝对值等于或超过小数点左边的位数,则$trunc
返回0
。例如:$trunc : [ 1234.5678, -5]
指定到了小数位左边的第5位,大于小数点左边的数字位数,所以返回0。 - 如果
<place>
解析为0,$trunc
对小数位右边第一位数字进行截取,返回整数部分。如:$trunc : [1234.5678, 0]
返回1234
。
- 如果
使用
$trunc
不会对截断的数据进行舍入。要将输入值舍入到指定位置,可使用 $round
表达式。
返回的数据类型
如果截断到特定的小数位,$trunc
返回的数据类型与输入表达式或值的数据类型一致,如果截断到整数位,$trunc
返回整数。
null, NaN, 和 正/负无穷
- 如果第一个参数解析为
null
值或引用缺少的字段,则$trunc
返回null
。 - 如果第一个参数解析为
NaN
,则$trunc
返回NaN
。 - 如果第一个参数解析为负无穷大或正无穷大,则
$trunc
分别返回负无穷大或正无穷大。
|例子|结果|
|=|-|
|{ $trunc: [ NaN, 1] }
|NaN
|
|{ $trunc: [ null, 1] }
|null
|
|{ $trunc : [ Infinity, 1 ] }
|Infinity
|
|{ $trunc : [ -Infinity, 1 ] }
|-Infinity
|
举例
使用下面脚本创建samples
集合:
js
db.samples.insertMany(
[
{ _id: 1, value: 19.25 },
{ _id: 2, value: 28.73 },
{ _id: 3, value: 34.32 },
{ _id: 4, value: -45.39 }
]
)
- 下面的聚合返回值截取到小数点后第一位:
js
db.samples.aggregate([
{ $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } }
])
操作返回下面的结果:
json
{ "_id" : 1, "truncatedValue" : 19.2 }
{ "_id" : 2, "truncatedValue" : 28.7 }
{ "_id" : 3, "truncatedValue" : 34.3 }
{ "_id" : 4, "truncatedValue" : -45.3 }
- 下面的聚合返回截断到小数点左边的第一位数字的值:
js
db.samples.aggregate([
{ $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } }
])
操作返回下面的结果:
json
{ "_id" : 1, "truncatedValue" : 10 }
{ "_id" : 2, "truncatedValue" : 20 }
{ "_id" : 3, "truncatedValue" : 30 }
{ "_id" : 4, "truncatedValue" : -40 }
- 下面的聚合会返阶段为整数的值:
js
db.samples.aggregate([
{ $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } }
])
操作返回下面的结果:
json
{ "_id" : 1, "truncatedValue" : 19 }
{ "_id" : 2, "truncatedValue" : 28 }
{ "_id" : 3, "truncatedValue" : 34 }
{ "_id" : 4, "truncatedValue" : -45 }