Я пытаюсь найти среднее ($avg
) и стандартное отклонение ($stdDevPop
) в коллекции, проверьте, больше ли среднее значение, чем значение стандартного отклонения, и, в зависимости от этого, используйте большееодин как optimalCredit
значение.
Если я использую $avg
и $stdDevPop
внутри $group
, они работают без проблем, но когда я помещаю их в $project
, они возвращают Null
IЯ действительно новичок в 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
и th $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}