我想知道我是在做错什么,还是MongoDB确实严格评估$cond
运算符的两个分支。请参见以下示例:
db.collection.aggregate(
[
{
"$project":{
"condition":{
"$cond":{
"if": true,
"then":{
"$literal":"NaN"
},
"else":{
"$divide":[
{
"$literal":0.0
},
{
"$literal":0.0
}
]
}
}
}
}
}
]
)
在我看来,此聚合应该返回NaN
(对于每个匹配的文档),但是相反,我得到了除以零的错误。当显然要返回else
条件时,为什么要评估条件的then
分支?
只有当我将两个$literal
相除,并且其中一个操作数是一个列引用时,才会发生这种情况,即使该列的值为0
,它也会按预期工作。
答案 0 :(得分:1)
首先不需要使用.alwaysBottom {
position: absolute;
bottom: 0;
}
。
$literal
做完全一样的事情。
现在该错误。 db.collection.aggregate(
[
{
"$project":{
"condition":{
"$cond":{
"if": true,
"then": "NaN",
"else":{ "$divide":[ 0.0, 0.0] }
}
}
}
}
]
)
有2个常量,是在客户端上运行查询之前计算得出的,这似乎是合理的优化。