MongoDB $log10 运算符

MongoDB $log10 运算符 介绍

MongoDB 提供了多种算术表达式运算符。$log10 运算符就是这些运算符之一。$log10 运算符用于计算一个数字的以 10 为底的对数,并将结果作为双精度数返回。$log10 运算符是在 MongoDB 3.2 版本中添加的。

$log10 运算符等价于这个表达式( $log : [ <number>, 10 ] )。

MongoDB $log10 运算符 语法

{ $log10 : [ < number > ] }  

其中,<number> 可以是解析为非负数(即0、1、2、3...n)的任何有效表达式。

很重要的一点

  1. 如果 <number> 值为 null,则返回 null。
  2. 如果输入的值引用了缺失的字段,则返回 null。
  3. 如果 <number> 值为 NaN,则返回 NaN。
例子 输出结果
{ $log10 : 1 } 0
{ $log10 : 10 } 1
{ $log10 : 100 } 2
{ $log10 : 1000 } 3
{ $log10 : null } null
{ $log10 : 10 * 1 } NaN

MongoDB $log10 运算符 例子

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

{  
        {  
         "_id" : 1,   
         "name" : "toys",  
         "value" : 100  
        }  
        {  
         "_id" : 2,   
         "name" : "pen",  
         "value" : null   
        }  
        {  
         "_id" : 3,   
         "name" : "toys",  
         "value" : 28     
        }  
        {  
         "_id" : 4,   
         "name" : "phone",  
         "value" : -20  
        }  
        {  
         "_id" : 5,   
         "name" : "toys",  
         "value" : 30  
        }  
        {  
         "_id" : 6,   
         "name" : "headphone",  
         "value" : -10  
        }  
        {  
         "_id" : 7,   
         "name" : "pen",  
         "value" : 10  
        }  
        {  
         "_id" : 8,   
         "name" : "toys",  
         "value" : 20     
        }  
  
}  

示例 1:使用 $log10 运算符

在此示例中,我们将使用 $log10 运算符计算所有“toys”文档中“value”字段的以 10 为底的对数。

db.products.aggregate ( [  
      { $match : { name : "toys" } },  
        {  
          $project : {  
                            name : 1,  
                            value : 1,  
                            log10Value : { $log10 : "$value" }  
                          }  
         }  
   ]   
)  

输出结果为:

{
         "_id" : 1, 
         "name" : "toys",
         "value" : 100,
         "log10Value" : 2
}
{
         "_id" : 3, 
         "name" : "toys",
         "value" : 28,
         "log10Value" : 1.44715803134
}
{
         "_id" : 5, 
         "name" : "toys",
         "value" : 30,
         "log10Value" : 1.47712125472
}
{
         "_id" : 8, 
         "name" : "toys",
         "value" : 20,
         "log10Value" : 1.30102999566
}

示例 2:超出范围的值

log10 运算符只接受正数,如果 <number> 的值为负数,则返回错误。在此示例中,我们将使用 $log10 运算符计算“headphone”文档中“value”字段的以 10 为底的对数。

db.products.aggregate ( [  
      { $match : { name : "headphone" } },  
        {  
          $project : {  
                            name : 1,  
                            value : 1,  
                            log10Value : { $log10 : "$value" }  
                          }  
         }  
   ]   
)  

输出结果为:

uncaught exception : Error : command failed : {
	"ok": 0,
	"errmsg": "$log10's argument must be a positive number, but is -10",
	"code": 28761,
	"codeName": "Location28761"
}: aggregate failed:
_getErrorWithCode@src/mongo/shell/utils.js : 25 : 13
doassert@src/mongo/shell/assert.js : 18 : 14
_assertCommandWorked@src/mongo/shell/assert.js : 618 : 17
assert.commandWorked@src/mongo/shell/assert.js : 708 : 16
DB.prototype._runAggregate@src/mongo/shell/db.js : 266 : 5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js : 1046 : 12
@(shell) : 1 : 1

示例 3:Null值

使用 $log10 运算符时,空值变为零。让我们针对文档中的“value”字段运行 $log10 运算符。

db.products.aggregate ( [  
      { $match : { name : "pen" } },  
        {  
          $project : {   
                            _id : 0,  
                            name : 1,  
                            value : 1,  
                            log10Value : { $log10 : "$value" }  
                          }  
         }  
   ]   
)  

输出结果为:

{
         "name" : "pen",
         "value" : null,
         "log10Value" : null
}
{
         "name" : "pen",
         "value" : 10,
         "log10Value" : 1         
}

示例 4:NaN 值

db.products.aggregate ( [  
    { $match : { _id : 1 } },  
            {   
              $project : {   
                                _id: 0,  
                                name : 1,  
                                value : 1,  
                                log10Value : { $log10 : 1 * "$value" }  
                              }  
               }  
  ]  
)  

输出结果为:

{
         "name" : "toys",
         "value" : 100,
         "log10Value" : NaN         
}

示例 5:不存在的字段

如果 $log10 运算符应用于不存在的字段,则返回 null。

db.products.aggregate ( [  
    { $match : { _id : 3 } },  
            {   
              $project : {   
                                _id: 0,  
                                name : 1,  
                                value : 1,  
                                log10Value : { $log10 : "$data" }  
                              }  
               }  
  ]  
)  

输出结果为:

{
         "name" : "toys",
         "value" : 28,
         "log10Value" : null         
}

 

热门文章

优秀文章