通过使用$ cond确定某些内容,但是为什么$ cond始终为真?

问题描述

  1. 我试图查找不包含key和low字段的文档总数。但是它总是返回true,结果是文档总数。 确实存在此类文档不包含两个字段。

  2. 这是我尝试的代码:

     db.test.aggregate([
    { "$group": {
             "_id" : { user_id: "$id" },"a": { 
                "$sum": {
    
            "$cond": [ {
            $and:[{low:null},{ key:null}]
            },1,0
            ]
         } 
         },"b": { "$sum": {
                 "$cond": [ { "$ifNull": ["$key",false] },0 ]
             } },"c": { "$sum": {
                 "$cond": [ { "$ifNull": ["$low",} },{ "$project": {
             "_id": 0,"a": 1,"b": 1,"c": 1
           } }
            ])
    

解决方法

$cond表达式中,您需要使用聚合运算符,而不是查询语法。

使用{low:null}代替{$eq:["$low",null]},并且使用key测试。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...