MongoDB 条件(如果存在则求和,否则为零)

MongoDB conditional (sum if exists, else zero)

我正在尝试对可能不存在该字段的聚合管道中的某个字段求和。否则,return 应该为零。到目前为止,这是我的代码:

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

这不起作用,因为在 $ifNull 中调用 $sum 会引发一元运算符异常:

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

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

<accumulator>运算符必须是以下累加器运算符之一:accumulator-operator,而$ifNull运算符不是其中之一,

运算符$sum必须在root中才能求和,

$ifNull的用法是:

Evaluates an expression and returns the value of the expression if the expression evaluates to a non-null value. If the expression evaluates to a null value, including instances of undefined values or missing fields, returns the value of the replacement expression.

所以$ifNull不能满足你的要求,

您可以尝试 $cond 运算符来检查字段类型是否丢失然后 0 否则 1,

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