MongoDB $log 运算符
MongoDB $log 运算符 介绍
MongoDB 提供了多种算术表达式运算符。$log 运算符就是这些运算符之一。$log 运算符用于聚合管道阶段。该运算符还用于计算给定基数的对数,并将输出作为双精度数返回。
MongoDB $log 运算符 语法
{ $log: [ <number>, <base> ] }
<number> 可以是解析为非负数(0、1、2、3....)的任何有效表达式,<base> 可以是解析大于 1 的正数的任何有效表达式。
很重要的一点:
- 如果参数值为 null,则 $abs 运算符返回 null。
- 如果输入的值引用了缺失的字段,则 $abs 运算符返回 null。
- 如果参数值为 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 |
MongoDB $log 运算符 例子
在以下示例中,我们正在使用:
Database: Yiidian
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 运算符
在这个例子中,我们将在每个矩形中找到 area 字段的 log 值,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 字段的 log 值,log 的基值为 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:Null值
在这个例子中,我们要在三角形中求面积字段的对数值,对数的基值为 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,
}
热门文章
优秀文章