MongoDB $trunc 运算符

MongoDB $trunc 运算符 介绍

MongoDB 提供了多种算术表达式运算符。$trunc 运算符就是这些运算符之一。$trunc 运算符用于将数字截断为整数或指定的小数位。

MongoDB $trunc 运算符 语法

{ $trunc : [ <number>, <place> ] }  

很重要的一点:

  1. <number> 可以是任何有效的表达式,直到它解析为一个数字。<number> 的值必须是整数、双精度、小数或长整数。如果 <number> 不是非数字数据类型,则返回错误。
  2. <place> 可以是任何有效的可选表达式,解析为 -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

MongoDB $trunc 运算符 例子

假设我们有一个包含以下文档的产品集合。

{  
        {  
         "_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  
        }  
}  

在此示例中,我们使用 $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
}

 

热门文章

优秀文章