MongoDB $exp 运算符
MongoDB 提供了多种逻辑查询运算符。$exp 运算符就是这些运算符之一。$exe 运算符将欧拉数 (e) 提高到给定指数并返回其运算结果。
欧拉数 (e) 是多少?
“e”数也称为欧拉数。这是一个数学常数,大约等于 2.7182818284590452353602874713527。这个数字只是近似的,因为它是不合理的。欧拉数是自然对数的基础。
欧拉数值表:
数字 | 指数值 |
---|---|
0 | 1 |
1 | 2.718281828459045 |
2 | 7.38905609893065 |
语法
{ $exp: <exponent> }
指数表达式可以是解析为数字的任何有效表达式。
- 如果输入的指数参数值为 null,则 $exp 运算符返回 null。
- 如果指数参数引用一个缺失的字段,则 $exp 运算符返回 null。
- 如果输入的指数参数值变为 NaN,则 $exp 运算符返回 NaN。
例子
在以下示例中,我们正在使用:
Database: Yiidian
Collection: example1
Document: Four documents that contain the details of the example1
>db.example1.find().pretty()
{
{
"_id" : 1,
"name" : "circle",
"area" : 9
}
{
"_id" : 2,
"name" : "square",
"area" : 1
}
{
"_id" : 3,
"name" : "rectangle",
"area" : 10,
"unit" : {
"height" : 2,
"width" : 3
}
}
{
"_id" : 4,
"name" : "triangle",
"area" : 5
}
}
示例 1:使用 $exp 运算符
在此示例中,我们将 $exp 运算符应用于“区域”字段。
db.example1.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3, 4 ] } } },
{
$project:
{
_id: 0,
area: 1,
result: { $exp: "$area" }
}
}
]
)
输出结果为:
{ "area" : 9, "result" : 8103.083927575384 }
{ "area" : 1, "result" : 2.718281828459045 }
{ "area" : 10, "result" : 22026.46579480672 }
{ "area" : 5, "result" : 148.4131591025766 }
示例 2:在嵌入文档中使用 $exp 运算符
在此示例中,我们将 $exp 运算符应用于矩形中高度和宽度字段的值之间的差异。
db.example1.aggregate(
[
{ $match: {id: "3"}},
{
$project:
{
result: {$exp: {$subtract: ["$unit.height", "$unit.width"]}}
}
}
]
)
输出结果为:
{ "-id" : 3, "result" : 0.367879441171442 }
另一个例子:
在以下示例中,我们正在使用:
Database: Yiidian
Collection: example2
Document: Four documents that contain the details of the example1
>db.example1.find().pretty()
{
{
"_id" : 1,
"name" : "circle",
"area" : null
}
{
"_id" : 2,
"name" : "square",
"data" : infinity
}
{
"_id" : 3,
"name" : "rectangle",
"data" : -infinity
}
}
示例 3:Null值
在此示例中,我们将 $exp 运算符应用于“area”字段。
db.example2.aggregate(
[
{ $match: { _id: 1 } },
{
$project:
{
_id: 0,
data: 1,
result: { $exp: "$area" }
}
}
]
)
输出结果为:
{ "area" : null, "result" : null }
这里,“area”字段的值为null,所以它会返回null。
示例 4:缺少字段
在此示例中,我们将 $exp 运算符应用于“perimeter”字段。
db.example2.aggregate(
[
{
$project:
{
result: { $exp: "$perimeter" }
}
}
]
)
输出结果为:
{ "_id" : 1, "result" : null }
{ "_id" : 2, "result" : null }
{ "_id" : 3, "result" : null }
示例 5:无穷大值
db.example2.aggregate(
[
{ $match: { _id: { $in: [ 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $exp: "$data" }
}
}
]
)
输出结果为:
{ "data" : Infinity, "result" : Infinity }
{ "data" : -Infinity, "result" : 0 }
热门文章
优秀文章