Мне интересно, если я делаю что-то не так, или 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
s, если один из операндов являетсяссылка на столбец, даже если столбец имеет значение 0
, он работает как ожидалось.