MongoDB $log10运算符

MongoDB $log10运算符

MongoDB中的$log10运算符是什么

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

$log10运算符等同于以下表达式($log:[, 10])

$log10运算符的语法

{ $log10 : [ < number > ] }

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

重要提示

  1. 如果 <number> 的值为空,返回 null。
  2. 如果输入的值引用了一个缺失的字段,返回 null。
  3. 如果 <number>的值为 NaN,返回 NaN。
Example Output
{ $log10 : 1 } 0
{ $log10 : 10 } 1
{ $log10 : 100 } 2
{ $log10 : 1000 } 3
{ $log10 : null } null
{ $log10 : 10 * 1 } NaN

示例

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

{
        {
         "_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:空值

使用$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         
}

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程