我收集了以下类型的文件:
{
device: integer,
date: string,
time: string,
voltage: double,
amperage: double
}数据作为时间序列数据插入,并且一个单独的进程聚合和平均结果,这样这个集合每5分钟就有一个单一的文档。即。时间是00:05:00,00:10:00等。
我需要搜索一组特定的设备(通常每次5-10 )。我需要电压为>= 27.0,我需要搜索一个单一的日期。
这部分很容易,但我只需要找到数据时,所有5-10系统在一个时间间隔满足27.0的要求。我不知道该怎么处理这个要求。
一旦我知道了这一点,我就需要找到特定的设备分组,这些设备的安培字段之和最小,我需要返回发生这种情况的时间。
因此,让我们假设我将搜索5个设备。我需要找到所有5个设备都有一个电压>= 27.0和安培场之和是最低的时间。
我不知道如何要求所有的设备都满足电压要求,然后对这组设备,然后找出时间,当安培总和是最低的。
任何问题都会很好。
谢谢。
发布于 2022-12-01 01:23:16
您需要使用$all操作符。
注:提供有关“安培场之和最低”的更多信息。
db.collection.aggregate([
{
$match: {
device: { $in: [1, 2, 3] },
date: "2022/10/01",
voltage: { $gte: 27.0 }
}
},
{
$group: {
_id: "$time",
device: {
"$addToSet": "$device"
},
amperage: {
$min: "$amperage"
},
root: {
$push: "$$ROOT"
}
}
},
{
$match: {
device: { $all: [ 1, 2, 3 ] }
}
}
])https://stackoverflow.com/questions/74633686
复制相似问题