MongoDB $log 运算符

2024 年 9 月 6 日 | 3 分钟阅读

$log 运算符是什么?

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

$log 运算符的语法

<number> 可以是任何解析为非负数(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 是 e 的 JavaScript 表示)4.605170185988092

示例

在下面的示例中,我们将使用

>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 运算符

在此示例中,我们将找到每个矩形的 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。

输出

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

示例 3:缺失字段

在此示例中,我们将找到正方形的 perimeter 字段的对数,并且对数的底数为 10。

输出

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

示例 4:Null 值

在此示例中,我们将找到三角形的 area 字段的对数,并且对数的底数为 16。

输出

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