MongoDB $log操作符

MongoDB $log操作符

$log操作符是什么

MongoDB 提供了各种算术表达式操作符,其中$log操作符就是其中之一。$log操作符用于聚合管道阶段。该操作符还用于计算给定底数中一个数的对数,并将输出作为双精度数返回。

$log操作符的语法

{ $log: [ , <base> ] }

可以是任何解析为非负数的有效表达式(0,1,2,3….)。<base> 可以是任何解析为大于1的正数的有效表达式。

重要点:

  1. 如果参数值为null,则 $abs 运算符返回null。
  2. 如果输入值指向一个不存在的字段,则 $abs 运算符返回null。
  3. 如果参数值为NaN,则 $abs 运算符返回NaN。
示例 输出结果
{ $log : [ 100, 10 ] } 2
{$log : [ 200, 10 ] } 2.301029995663981
{$log : [ 10, 2 ] } 3.3219280948874
{ $log: [ 100, Math.E ] } (其中, Math.E 是 JavaScript 对 e 的表示) 4.605170185988092

示例

在下面的示例中,我们正在处理:

Database: javaTpoint
Collection: shapes
Document: Six documents that contain the details of the shapes
>db.example1.find().pretty()
{
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1hb78452"), 
         "name" : "rectangle",
         "area" : 16
        }
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1hb71478"), 
         "name" : "rectangle",
         "area" : 6
        }
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1789654"), 
         "name" : "circle",
         "area" : 19,
         "unit" : { 
                           "diameter" : 6,
                           "radius" : 3
                         }
        }
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1987412"), 
         "name" : "rectangle",
         "area" : 20
        }
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1987412"), 
         "name" : "square",
         "area" : 20
        }
        {
         "_id" : ObjectId("56254d4fdf2222265r4g1987f15"), 
         "name" : "triangle",
         "area" : null
        }
}

示例1:使用log算符

在这个示例中,我们要找出每个矩形的面积字段的对数值,且对数的底为10。

db.shapes.aggregate( 
[
    { match : { name : "rectangle" } },
       {project : { 
                              name : 1,
                              area : 1, 
                              logArea : { log : [ "area", 10 ] }
                           }
        }
] )

输出:

{
     "_id" : ObjectId("56254d4fdf2222265r4g1hb78452"), 
     "name" : "rectangle",
     "area" : 16,
     "logArea" : 1.204119982655925
}
{
     "_id" : ObjectId("56254d4fdf2222265r4g1789654"), 
     "name" : " rectangle",
     "area" : 6,
     "logArea" : 0.778151250383644
}
{
     "_id" : ObjectId("56254d4fdf2222265r4g1987412"), 
     "name" : "rectangle",
     "area" : 20,
     "logArea" : 1.301029995663981
} 

示例2:使用$log运算符(嵌套文档)

在这个示例中,我们将找到圆的unit.radius字段的对数值,并且对数的底数是2。

db.shapes.aggregate( 
[
    { match : { name : "cricle" } },
       {project : { 
                              name : 1,
                              area : 1,
                              unit.radius : 1, 
                              logRadius : { log : [ "unit.radius", 2 ] }
                           }
        }
] )

输出:

{
         "_id" : ObjectId("56254d4fdf2222265r4g1789654"), 
         "name" : "cricle",
         "area" : 19,
         "unit" : { "radius" : 3 },
         "logRadius" : 1.5849625007212
}  

示例3:缺少字段

在这个示例中,我们要找到正方形的周长字段的对数值,对数的底是10。

db.shapes.aggregate( 
[
    { match : { name : "square" } },
       {project : { 
                              name : 1,
                              area : 1, 
                              logperimeter : { log : [ "perimeter", 10 ] }
                           }
        }
] )

输出:

{
         "_id" : ObjectId("56254d4fdf2222265r4g1987412"), 
         "name" : "square",
         "area" : 20,
         "perimeter" : null  
}    

示例 4:空值

在这个示例中,我们将找出三角形中区域字段的对数值,并且对数的底为16。

db.shapes.aggregate( 
[
    { match : { name : "triangle" } },
       {project : { 
                              name : 1,
                              area : 1, 
                              logArea : { log : [ "area", 16 ] }
                           }
        }
] )

输出:

{
         "_id" : ObjectId("56254d4fdf2222265r4g1987f15"), 
         "name" : "triangle",
         "area" : null,
         "logArea" : null,
}    

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程