MongoDB $ln操作符

MongoDB $ln操作符

MongoDB中的$ln操作符是什么

MongoDB提供了各种算术表达式操作符。$ln操作符是其中之一。$ln操作符用于计算一个数的自然对数(ln,即log e ),并将结果返回为double类型。$ln操作符在聚合管道阶段中使用。

自然对数(ln)是基于数学常数”e”的对数,其中e是一个以2.7182818284590452353602874713527开头的无理数。”e”也被称为自然常数。在JavaScript中,我们使用Math.E表示”e”。

$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 } 其中 Math.E 是 JavaScript 中表示 e 的值。 1
{ $ln : null } null
{ $ln : NaN } NaN

示例

假设我们有以下文档的产品集合。

{
        {
         "_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 运算符计算”value”字段的自然对数。

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运算符计算”value”字段的自然对数。

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:空值

在这个示例中,我们使用$ln操作符计算一个“value”字段的自然对数。

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 }

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程