我试图在集合中找到平均值($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}
我知道了。我需要在中声明平均值($avg
)和标准偏差($stdDevPop
)$group
,然后从$project
{'$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}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句