MongoDB(pymongo)$ avg和$ stdDevPop在$ project中不起作用,但是在$ group中它们可以完美地工作

德泽梅尔

我试图在集合中找到平均值($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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章