MongoDB严格评估条件

时间:2019-03-15 13:29:44

标签: database mongodb nosql

我想知道我是在做错什么,还是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,它也会按预期工作。

1 个答案:

答案 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个常量,是在客户端上运行查询之前计算得出的,这似乎是合理的优化。