MongoDB $ln 运算符

MongoDB $ln 运算符 介绍

MongoDB 提供了多种算术表达式运算符。$ln 运算符就是这些运算符之一。$ln 运算符用于计算数字的自然对数(ln,即 log e),并将结果作为双精度数返回。$ln 运算符用于聚合管道阶段。

自然对数 (ln) 是数学常数“e”的底的对数,其中 e 是从 2.7182818284590452353602874713527 开始的无理数。“e”也称为欧拉数。在 JavaScript 中,我们使用 Math.E 来表示“e”。

MongoDB $ln 运算符 语法

{ $ln : [ < number > ] }  

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

很重要的一点

  1. 如果 <number> 值为 null,则返回 null。
  2. 如果输入的值引用了缺失的字段,则返回 null。
  3. 如果 <number> 值为 NaN,则返回 NaN。
例子 输出结果
{ $ln : 1 } 0
{ $ln : 10 } 2.30258509299
{ $ln : 100 } 4.60517018599
{ $ln: Math.E } where Math.E is a JavaScript representation for e. 1
{ $ln : null } null
{ $ln : NaN } NaN

MongoDB $ln 运算符 例子

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

{  
        {  
         "_id" : 1,   
         "name" : "toys",  
         "value" : 10  
        }  
        {  
         "_id" : 2,   
         "name" : "pen",  
         "value" : 5      
        }  
        {  
         "_id" : 3,   
         "name" : "phone",  
         "value" : 8      
        }  
        {  
         "_id" : 4,   
         "name" : "charger",  
         "value" : 20  
        }  
        {  
         "_id" : 5,   
         "name" : "laptop",  
         "value" : 30  
        }  
}  

示例 1:使用 $ln 运算符

在此示例中,我们使用 $ln 运算符计算“值”字段的自然对数。

db.products.aggregate (  
   [  
     {  
       $project : {  
                          _id : 0,  
                          name : 1,  
                          value : 1,  
                          natural_log : {$ln : [ "$value" ] }  
                        }  
     }  
   ]  
)  

输出结果为:

{ "name" : "toys", "value" : 10, "natural_log" : 2.30258509299 }
{ "name" : "pen", "value" : 5, "natural_log" : 1.60943791243 }
{ "name" : "phone", "value" : 8, "natural_log" : 2.07944154168 }
{ "name" : "charger", "value" : 20, "natural_log" : 2.99573227355 }
{ "name" : "laptop", "value" : 30, "natural_log" : 3.40119738166 }

假设我们将以下文档添加到我们的集合中:

{
        {
         "_id" : 6, 
         "name" : "headphone",
         "value" : -10
        }
        {
         "_id" : 7, 
         "name" : "pen",
         "value" : -20	
        }
}

示例 2:超出范围的值

在此示例中,我们使用 $ln 运算符计算“值”字段的自然对数。

db.products.aggregate(  
   [  
     { $match : { _id : { $in : [ 7 ] } } },  
     {  
       $project:  
          {  
            _id : 0,  
            name : 1,  
            value : 1,  
            natural_log : { $ln [ "$value" ] },  
          }  
     }  
   ]  
)  

输出结果为:

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

假设我们在集合中再添加一个文档:

{
        {
         "_id" : 8, 
         "name" : "phone",
         "value" : null
        }
}

示例 3:Null值

在此示例中,我们使用 $ln 运算符计算“值”字段的自然对数。

db.products.aggregate(  
   [  
     { $match: { _id: { $in: [ 8 ] } } },  
     {  
       $project:  
          {  
            _id : 0,  
            name : 1,  
            value : 1,  
            natural_log : { $ln [ "$value" ] },  
          }  
     }  
   ]  
)  

输出结果为:

{ "name" : "phone", "value" : null, "natural_log" : null }

示例 4:不存在的字段

如果 $ln 运算符应用于不存在的字段,则返回 null。在此示例中,我们使用 $ln 运算符计算“value”字段的自然对数。

db.products.aggregate(  
   [  
     { $match: { _id: { $in: [ 1 ] } } },  
     {  
       $project:  
          {  
            _id : 0,  
            name : 1,  
            value : 1,  
            natural_log : { $ln [ "$product" ] },  
          }  
     }  
   ]  
)  

输出结果为:

{ "name" : "toys", "value" : 10, "natural_log" : null }

 

热门文章

优秀文章