Python 平均聚合不';我不重视价值观

Python 平均聚合不';我不重视价值观,python,mongodb,aggregation-framework,pymongo,Python,Mongodb,Aggregation Framework,Pymongo,我有像这样存储的数据 {'_id': ObjectId('593ab6131ccb9b0c0fb2b2a6'), 'timestamp': datetime.datetime(2016, 12, 12, 8, 59), 'VOL_GAZ_CHA_I_001': '1.6466e+05', 'VOL_ECS_PUI_I_001': 4581, 'VOL_ECS_APP_I_001': 21, 'VOL_CHA_PAC_I_001': '7.9696e+05', 'TEM_SE_N_I_001':

我有像这样存储的数据

{'_id': ObjectId('593ab6131ccb9b0c0fb2b2a6'), 'timestamp': datetime.datetime(2016, 12, 12, 8, 59), 'VOL_GAZ_CHA_I_001': '1.6466e+05', 'VOL_ECS_PUI_I_001': 4581, 'VOL_ECS_APP_I_001': 21, 'VOL_CHA_PAC_I_001': '7.9696e+05', 'TEM_SE_N_I_001': 18, 'TEM_SDB_S_I_001': 19.1, 'TEM_SAM_SO_I_001': 19, 'TEM_SAL_NO_I_001': 18.7, 'TEM_PAL_N_I_001': 18, 'TEM_GA_E_I_001': 4.6, 'TEM_FAC_NOR_I_001': 5.14, 'TEM_ENT_NE_I_001': 18.6, 'TEM_ECS_PUI_I_001': 23.1, 'TEM_ECS_APP_I_001': 37.5, 'TEM_CUI_S_I_001': 18.7, 'TEM_CHA_PAC_I_001': 23.7, 'TEM_CH3_NO_I_001': 18.1, 'TEM_CH2_SO_I_001': 19, 'TEM_CH1_SE_I_001': 18.9, 'TEM_CEL_SE_I_001': 18.3, 'TEM_BUR_NE_I_001': 18.3, 'INT_ELE_GEN_I_001': 0, 'HUM_SE_N_I_001': 56, 'HUM_SDB_S_I_001': 39, 'HUM_SAM_SO_I_001': 50, 'HUM_SAL_NO_I_001': 42, 'HUM_PAL_N_I_001': 42, 'HUM_GA_E_I_001': 88, 'HUM_ENT_NE_I_001': 42, 'HUM_CUI_S_I_001': 43, 'HUM_CH3_NO_I_001': 43, 'HUM_CH2_SO_I_001': 40, 'HUM_CH1_SE_I_001': 41, 'HUM_CEL_SE_I_001': 51, 'HUM_BUR_NE_I_001': 42, 'FLX_SOL_SUD_I_001': 35, 'ENE_ELE_USA_I_001': 0, 'ENE_ELE_PV_I_001': 1589, 'ENE_ELE_GEN_I_001': 0, 'ENE_ELE_CHA_I_001': 0, 'ENE_ELE_BTD_I_001': 0, 'ENE_ECS_PUI_I_001': '1.5729e+05', 'ENE_ECS_APP_I_001': 0, 'ENE_CHA_RDC_I_001': 0, 'ENE_CHA_PAC_I_001': 2054, 'ENE_CHA_GEN_I_001': '2.2468e+06', 'CO2_SE_N_I_001': 552, 'CO2_SDB_S_I_001': 390, 'CO2_SAM_SO_I_001': 531, 'CO2_SAL_NO_I_001': 403, 'CO2_PAL_N_I_001': 390, 'CO2_GA_E_I_001': 668, 'CO2_ENT_NE_I_001': 390, 'CO2_CUI_S_I_001': 400, 'CO2_CH3_NO_I_001': 390, 'CO2_CH2_SO_I_001': 390, 'CO2_CH1_SE_I_001': 390, 'CO2_CEL_SE_I_001': 504, 'CO2_BUR_NE_I_001': 481}
每一条数据都有一个“_id”、一个日期对象“timestamp”和几个传感器,它们有自己的测量值。对于每个传感器,我希望每个月的平均值

我做的第一件事是选择一个传感器。然后我过滤我的数据集,只得到“_id”、“时间戳”和所选传感器。(见$match)

然后,我对我的数据集的每个月进行聚合,我想评估所选传感器在这个月内记录的平均值

for chosenSensor in self.chosenSensors:       

        monthlyAverage = client[page1.currentDB][page2.currentColl].aggregate([{"$match":{chosenSensor:{"$exists": True}}}, {"$group":{"_id":{"year":{"$year":"$timestamp"}, "month":{"$month":"$timestamp"}}, "avg":{"$avg": chosenSensor}}}])
然而,我得到的是:

{'_id': {'year': 2017, 'month': 4}, 'avg': 0.0}
{'_id': {'year': 2017, 'month': 3}, 'avg': 0.0}
{'_id': {'year': 2017, 'month': 2}, 'avg': 0.0}
{'_id': {'year': 2016, 'month': 12}, 'avg': 0.0}
{'_id': {'year': 2017, 'month': 1}, 'avg': 0.0}
{'_id': {'year': 2016, 'month': 11}, 'avg': 0.0}
根据此传感器的值,平均操作每次给出0.0,这是不可能的

另一件事是:为了选择传感器,我使用了一个可能不是很干净的循环,因为我需要对每个传感器进行一次平均查询。这和我想的一样糟糕吗?还有别的办法吗


Neil Lunn在前一个问题中告诉了我这一点,并提出了一些解决方案:。但老实说,我不明白他的建议。

看起来您错过了
$avg
变量参数中的
$
。您正在代码中使用save field name变量,而没有将其作为MongoDB期望的字符串的前缀。所以
chosensor
需要分配一个字符串,比如
“$sensorName”
$
很重要,也是我。不会的。我想你对另一个答案感到困惑。答案中的语法很清楚,所以你可以理解。@Neil Lunn当然。。。我只是将我的字符串Chosensor与前面的“$”连接起来,它就可以工作了。Thanks@Neil是的,是你。是的,语法是写出来的,但我没有想到可能是这样。我没有注意。