如何计算 mongoDB 文档中多个字段的平均值?
How do I calculate the average of multiple fields in a mongoDB document?
我有一个包含以下字段的集合:
_id:612ff22c17286411a17252cf
WELL:"199-H4-15A"
TYPE:"E"
SYSTEM:"HX"
ID:"199-H4-15A_E_HX"
Jan-14:-168.8
Feb-14:-151
Mar-14:-164.1
Apr-14:-168.7
May-14:-172.6
Jun-14:-177.3
Jul-14:-177.6
Aug-14:-171.9
Sep-14:-138.9
Oct-14:-130.3
Nov-14:-163.8
Dec-14:-161.4
Jan-15:-168.7
Feb-15:-168.9
Mar-15:-168.6
Apr-15:-164.6
May-15:-141.7
Jun-15:-153.5
Jul-15:-163.7
Aug-15:-167.7
我正在尝试取所有月份字段的平均值(例如,“Jan-14”、“Feb-14”等所有文件)。我正在考虑以某种方式将所有月份字段数据推送到一个数组中,然后对这些值进行平均,但我想避免必须列出所有单独的字段名称。以下是我目前所拥有的。
[{$match: {
'WELL': '199-H4-15A'
}}, {$group: {
_id: null,
MonthAverageFlows: {
$push: {
$isNumber: ['$all']
}
}
}}, {$unwind: '$MonthAverageFlows'}, {$group: {
_id: null,
average: {
$avg: '$MonthAverageFlows.value'
}
}}]
所有结果都是```null``。任何和所有帮助将不胜感激。原始数据为csv格式:
WELL, TYPE, SYSTEM, ID, JAN-14, FEB-14, . . .
"199-H4-15A", "E", "HX", "199-H4-15A_E_HX", -168.8, -151, . . .
使用动态值作为字段名通常被认为是反模式,您应该避免这种情况。您可能会给编写和维护查询带来不必要的困难。
不过,您可以在聚合管道中执行以下操作:
$objectToArray
将原始文档转换为 k-v 元组数组
$filter
要获取的数组只包含每月数据
$avg
计算总和
这里是Mongo playground供您参考。
我有一个包含以下字段的集合:
_id:612ff22c17286411a17252cf
WELL:"199-H4-15A"
TYPE:"E"
SYSTEM:"HX"
ID:"199-H4-15A_E_HX"
Jan-14:-168.8
Feb-14:-151
Mar-14:-164.1
Apr-14:-168.7
May-14:-172.6
Jun-14:-177.3
Jul-14:-177.6
Aug-14:-171.9
Sep-14:-138.9
Oct-14:-130.3
Nov-14:-163.8
Dec-14:-161.4
Jan-15:-168.7
Feb-15:-168.9
Mar-15:-168.6
Apr-15:-164.6
May-15:-141.7
Jun-15:-153.5
Jul-15:-163.7
Aug-15:-167.7
我正在尝试取所有月份字段的平均值(例如,“Jan-14”、“Feb-14”等所有文件)。我正在考虑以某种方式将所有月份字段数据推送到一个数组中,然后对这些值进行平均,但我想避免必须列出所有单独的字段名称。以下是我目前所拥有的。
[{$match: {
'WELL': '199-H4-15A'
}}, {$group: {
_id: null,
MonthAverageFlows: {
$push: {
$isNumber: ['$all']
}
}
}}, {$unwind: '$MonthAverageFlows'}, {$group: {
_id: null,
average: {
$avg: '$MonthAverageFlows.value'
}
}}]
所有结果都是```null``。任何和所有帮助将不胜感激。原始数据为csv格式:
WELL, TYPE, SYSTEM, ID, JAN-14, FEB-14, . . .
"199-H4-15A", "E", "HX", "199-H4-15A_E_HX", -168.8, -151, . . .
使用动态值作为字段名通常被认为是反模式,您应该避免这种情况。您可能会给编写和维护查询带来不必要的困难。
不过,您可以在聚合管道中执行以下操作:
$objectToArray
将原始文档转换为 k-v 元组数组$filter
要获取的数组只包含每月数据$avg
计算总和
这里是Mongo playground供您参考。