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]
}
}
}
},
我正在尝试对可能不存在该字段的聚合管道中的某个字段求和。否则,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]
}
}
}
},