分组汇总上是否有任何方法可以根据第二个字段的值获得最小值?

时间:2019-01-23 14:26:23

标签: mongodb group-by aggregate

我实际上是想从1/4小时的数据中解析出mongo数据库中的数据,并且有多个设备可以将相同设备的数据发送回去。

所以我实际上是根据序列号和条目以及ISOdate进行匹配的汇总,

再加上一个使用开关的组,将每个1/4小时存储在正确的位置,但是我也想获得每个设备的最小值,因此对于相同的1/4,我可以拥有n个差异值。

$ match:

'sn':{'$ in':['sn1','sn2']},

'entry':{'$ in':[0,1,2,3,4]},

'dt':{'$ gte':ISODate(“ 2019-01-23T00:00:00.000 + 0000”),'$ lt':ISODate(“ 2019-01-24T00:00:00.000 + 0000” )}

$ group:

_id:{     'entry':'$ entry',     'dt':{         '$ switch':{             “分支机构”:[ {'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T00:15:00.000 + 0000”)]},'then':ISODate(“ 2019-01-23T00:15 :00.000 + 0000“)},

{'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T00:30:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T00:30:00.000 + 0000“)},

{'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T00:45:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T00:45:00.000 + 0000“)},

{'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T00:00:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T01:00:00.000 + 0000“)},

{'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T01:15:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T01:15:00.000 + 0000“)},

{'case':{'$ lte':['$ dt',ISODate(“ 2019-01-23T01:30:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T01:30:00.000 + 0000“)},

{'case':{'$ gte':['$ dt',ISODate(“ 2019-01-23T01:30:00.000 + 0000”)]},'then':ISODate(“ 2019-01- 23T02:00:00.000 + 0000“)},             ]         }

}

}, 值:{'$ min':'$ value'}

我的预期结果,我想添加的内容如下:

_id:     条目”:NumberInt(3),     “ dt”:ISODate(“ 2019-01-23T02:00:00.000 + 0000”)

valuesn1:1 值SN2:0, 平均SNS:0.5,

我真的不知道是否可行,我尝试进行尽可能少的后期处理,这是一种方法吗?

谢谢。

0 个答案:

没有答案