mongodb条件(sum如果存在,否则为零)

i7uq4tfw  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(595)

我试图在聚合管道中的某个字段上求和,而该字段可能不存在。否则,返回值应为零。这是我目前的代码:

admits = [
    {'$match': {'meta.State': item['state'],'meta.County': item['county'], 'meta.first_seen': date}},
    {'$group': {'_id': {'item': '$item'}, 'admissions': {'$ifNull': [{'$sum': 1}, 0]}}},
]

这不起作用,因为打电话 $sum 在一个 $ifNull 引发一元运算符异常:

pymongo.errors.OperationFailure: The $ifNull accumulator is a unary operator
hmae6n7t

hmae6n7t1#

pymongo.errors.operationfailure:$ifnull累加器是一元运算符
这个 <accumulator> 运算符必须是以下累加器运算符之一:累加器运算符,和 $ifNull 接线员不是其中之一,
这个 $sum 如果要求和,运算符必须在根中,
$ifnull的用法是:
计算表达式,如果表达式的计算结果为非空值,则返回表达式的值。如果表达式的计算结果为空值(包括未定义值或缺少字段的示例),则返回替换表达式的值。
所以呢 $ifNull 不能满足你的要求,
您可以尝试$cond运算符检查字段类型是否丢失,然后选择0,否则选择1,

{
  '$group': {
    '_id': {'item': '$item'}, 
    'admissions': {
      $sum: {
        $cond: [{ $eq: [{ $type: "$admissions" }, "missing"] }, 0, 1]
      }
    }
  }
},

相关问题