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

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

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

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

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

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

hmae6n7t1#

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

  1. {
  2. '$group': {
  3. '_id': {'item': '$item'},
  4. 'admissions': {
  5. $sum: {
  6. $cond: [{ $eq: [{ $type: "$admissions" }, "missing"] }, 0, 1]
  7. }
  8. }
  9. }
  10. },
展开查看全部

相关问题