我正尝试在集合中查找平均值($avg
和标准偏差($stdDevPop
),检查平均值是否大于标准偏差值,并根据此值,将较大的值用作optimalCredit
值。
如果我在$avg
中使用$stdDevPop
和$group
,它们可以正常工作,但是当我将它们放在$project
中时,它们返回Null
我真的是Mongo的新手(昨天早上,我做了第一个查询),所以我知道我必须了解一些错误。
这是我用来比较平均值($avg
)和标准偏差($stdDevPop
)的代码:
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'count':
{'$sum': 1}
}
},
{'$project':
{'optimalCredit':
{'$cond':
{'if':
{'$gt': [
{'$avg': 'credit'},
{'$stdDevPop': 'credit'}
]
},
'then':
{'$avg': '$credit'},
'else':
{'$stdDevPop': '$credit'}
}
}
}
},
{'$sort':
{'optimalCredit': -1}
}
这是我用来测试$avg
和$stdDevPop
是否工作并返回数据的代码:
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0},
}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'creditAvg':
{'$avg': '$credit'},
'creditStdDev':
{'$stdDevPop':'$credit'},
'count': {'$sum': 1}
}
}
这是我在使用$project
时得到的信息:
{'_id': {'parNr': 7, 'charRange': 1500}, 'optimalCredit': None}
如果删除$project
并将$avg
和$stdDevPop
移到$group
中,我将得到以下信息:
{'_id': {'charRange': 1500, 'parNr': 7}, 'creditStdDev': 19.430788855719562, 'count': 9, 'creditAvg': 16.0}
最后,这就是它的外观(使用上面的数字):
{'_id': {'parNr': 7, 'charRange': 1500}, 'count': 9, 'optimalCredit': 19.430788855719562}
答案 0 :(得分:0)
我明白了。我需要在$avg
中声明平均值($stdDevPop
和标准差($group
),然后从$project
调用这2个
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'count': {'$sum': 1},
'creditAvg': {'$avg': '$credit'},
'creditStdDev': {'$stdDevPop': '$credit'}
}
},
{'$project':
{'count': '$count',
'creditAvg': '$creditAvg',
'creditStdDev': '$creditStdDev',
'optimalCredit':
{'$cond':
{'if':
{'$gt': [
'$creditAvg',
'$creditStdDev'
]
},
'then': '$creditAvg',
'else': '$creditStdDev'
}
}
}
},
{'$sort':
{'optimalCredit': -1}
}