Database MongoDB对条件的严格评估
我想知道我是否做错了什么,或者MongoDB确实严格地评估了Database MongoDB对条件的严格评估,database,mongodb,nosql,Database,Mongodb,Nosql,我想知道我是否做错了什么,或者MongoDB确实严格地评估了$cond操作符的两个分支。请参见以下示例: db.collection.aggregate( [ { "$project":{ "condition":{ "$cond":{ "if": true, "then":{ "$literal":"NaN"
$cond
操作符的两个分支。请参见以下示例:
db.collection.aggregate(
[
{
"$project":{
"condition":{
"$cond":{
"if": true,
"then":{
"$literal":"NaN"
},
"else":{
"$divide":[
{
"$literal":0.0
},
{
"$literal":0.0
}
]
}
}
}
}
}
]
)
在我看来,这个聚合应该返回NaN
(对于每个匹配的文档),但是我得到的是零误差除法。为什么条件的else
分支会被评估,而则会返回条件
只有将两个$literal
除以,如果其中一个操作数是列引用,即使列的计算结果为0
,也会发生这种情况。首先,不需要使用$literal
db.collection.aggregate(
[
{
"$project":{
"condition":{
"$cond":{
"if": true,
"then": "NaN",
"else":{ "$divide":[ 0.0, 0.0] }
}
}
}
}
]
)
做完全相同的事情
现在谈谈错误“$divide”:[0.0,0.0]
有两个常量,在客户端运行查询之前计算,这似乎是合理的优化。好的,谢谢,我只需要知道这些。我不喜欢,但至少我知道我对此无能为力。