MongoDB $trunc 运算符
MongoDB中的$trunc
运算符是什么?
MongoDB提供了各种算术表达式运算符。$trunc
运算符是其中之一。$trunc
运算符用于将数字截断为整数或指定的小数位数。
$trunc运算符的语法
{ $trunc : [ , ] }
重要点:
- <数字> 可以是任何有效的表达式,直到它解析为一个数字。<数字> 的值必须是整数、双精度浮点数、十进制数或长整型。如果<数字>不是非数值数据类型,则返回错误。
- <位置> 可以是任何有效的可选表达式,解析为 -20 到 100 之间的整数。
条件 | 示例 | 输出 |
---|---|---|
如果 解析为一个正整数,则将小数点后的数截断为 位数的值。 | $trunc: [7896.12569, 3] | 7896.125 |
如果 解析为一个负整数,则将小数点左边到 位数的数字替换为0。 | $trunc: [7896.12569, -3] | 7000 |
$trunc: [7896.12569, -5] | 0 | |
如果 解析为0,则截断小数点后的所有数字,并返回整数部分的值。 | $trunc: [7896.12569, 0] | 7896 |
示例
假设我们有一组具有以下文档的产品。
{
{
"_id" : 1,
"name" : "pen",
"data" : 11.25
}
{
"_id" : 2,
"name" : "pencil",
"data" : 10.32
}
{
"_id" : 3,
"name" : "box",
"data" : 15.97
}
{
"_id" : 4,
"name" : "bottle",
"data" : -12.3
}
{
"_id" : 5,
"name" : "oval",
"data" : 20.6
}
{
"_id" : 6,
"name" : "triangle",
"data" : 5
}
{
"_id" : 7,
"name" : "bottle",
"data" : -1
}
}
示例1
在这个示例中,我们使用 $trunc 操作符来截断数据字段中的值。
db.products.aggregate (
[
{
project : {
data : 1,
value : {trunc : ["$data"]}
}
}
]
)
输出:
{
"_id" : 1,
"data" : 11.25,
"value" : 11
}
{
"_id" : 2,
"data" : 10.32,
"value" : 10
}
{
"_id" : 3,
"data" : 15.97,
"value" : 15
}
{
"_id" : 4,
"data" : -12.3,
"value" : -12
}
{
"_id" : 5,
"data" : 20.6,
"value" : 20
}
{
"_id" : 6,
"data" : 5,
"value" : 5
}
{
"_id" : 7,
"data" : -1,
"value" : -1
}
示例2:指定小数位截断
在此示例中,我们使用$trunc运算符来截断数据字段中的值。
db.products.aggregate (
[
{
project : {
data : 1,
value : {trunc : ["$data", 1]}
}
}
]
)
输出:
{
"_id" : 1,
"data" : 11.25,
"value" : 11.2
}
{
"_id" : 2,
"data" : 10.32,
"value" : 10.3
}
{
"_id" : 3,
"data" : 15.97,
"value" : 15.9
}
{
"_id" : 4,
"data" : -12.3,
"value" : -12.3
}
{
"_id" : 5,
"data" : 20.6,
"value" : 20.6
}
{
"_id" : 6,
"data" : 5,
"value" : 5
}
{
"_id" : 7,
"data" : -1,
"value" : -1
}
假设我们将以下文件添加到我们的集合中:
{
{
"_id" : 8,
"name" : "charge",
"data" : 8611.1325
}
{
"_id" : 9,
"name" : "pen",
"data" : 1856.5632
}
{
"_id" : 10,
"name" : "chart",
"data" : 5785.1397
}
{
"_id" : 11,
"name" : "glass",
"data" : 2312.3012
}
}
示例3:负小数位数
在这个示例中,我们使用$trunc运算符来截断数据字段中的值。
db.products.aggregate(
[
{ match: { _id: {in: [ 8, 9, 10, 11 ] } } },
{
project:
{
data : 1,
value_1 : {trunc: [ "data", -1 ] },
value_2 : {trunc: [ "data", -2 ] },
value_3 : {trunc: [ "data", -3 ] },
value_4 : {trunc: [ "$data", -4 ] },
}
}
]
).pretty()
输出:
{
"_id" : 8,
"data" : 8611.1325,
"value_1" : 8610,
"value_2" : 8600,
"value_3" : 8000,
"value_4" : 0
}
{
"_id" : 9,
"data" : 1856.5632,
"value_1" : 1850,
"value_2" : 1800,
"value_3" : 1000,
"value_4" : 0
}
{
"_id" : 10,
"data" : 5785.1397,
"value_1" : 5780,
"value_2" : 5700,
"value_3" : 5000,
"value_4" : 0
}
{
"_id" : 11,
"data" : 2312.3012,
"value_1" : 2310,
"value_2" : 2300,
"value_3" : 2000,
"value_4" : 0
}