InfluxDB 1.8中Flux查询filter多OR条件的简化方法咨询
简化InfluxDB 1.8 Flux查询中的多OR过滤条件
在InfluxDB 1.8的Flux语法中,你可以使用**contains()**核心函数替代多个or拼接的过滤条件,实现类似"值在数组中"的判断逻辑,大幅简化查询语句。
简化后的过滤写法
将原来的多OR条件:
|> filter(fn: (r) => r["idDispositivo"] == "155" or r["idDispositivo"] == "150")
替换为:
|> filter(fn: (r) => contains(set: ["155", "150"], value: r["idDispositivo"]))
完整查询示例
修改后的完整Flux查询如下:
from(bucket: "my_buck") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "my_measurement") |> filter(fn: (r) => contains(set: ["155", "150"], value: r["idDispositivo"])) |> aggregateWindow(every: 1h, fn: mean, createEmpty: false) |> yield(name: "mean")
用法说明
contains()函数接收两个参数:set:要检查的目标值数组(比如示例中的["155", "150"])value:需要匹配的字段值(比如r["idDispositivo"])
- 当字段值存在于
set数组中时,函数返回true,否则返回false,完全等价于多个or条件的逻辑。
动态生成场景适配
如果需要动态生成查询,只需要动态构建set参数的数组即可,相比拼接大量or条件,这种方式代码更简洁、可读性更高,也更容易维护。
内容的提问来源于stack exchange,提问作者Rirro Romeu
相关产品推荐
相关产品推荐

