Search code examples
node.jsfilteringinfluxdbflux

flux query: filter out all records related to one matching the condition


I'm trying to filter an influx DB query (using the nodeJS influxdb-client library). As far as I can tell, it only works with "flux" queries.

I would like to filter out all records that share a specific attribute with any record that matches a particular condition. I'm filtering using the filter-function, but I'm not sure how I can continue from there. Is this possible in a single query?

My filter looks something like this: |> filter(fn:(r) => r["_value"] == 1 and r["button"] == "1" ) and I would like to leave out all the record that have the same r["session"] as any that match this filter.

Do I need two queries; one to get those r["session"]s and one to filter on those, or is it possible in one?

Update:

Trying the two-step process. Got the list of r["session"]s into an array, and attempting to use the contains() flux function now to filter values included in that array called sessionsExclude.

Flux query section: |> filter(fn:(r) => contains(value: r["session"], set: ${sessionsExclude}))

Getting an error unexpected token for property key: INT ("102")'. Not sure why. Looks like flux tries to turn the values into Integers? The r["session"] is also a String (and the example in the docs also uses an array of Strings)...


Solution

  • Ended up doing it in two queries. Still confused about the Strings vs Integers, but casting the value as an Int and printing out the array of r["session"] within the query seems to work like this:

    '|> filter(fn:(r) => not contains(value: int(v: r["session"]), set: [${sessionsExclude.join(",")}]))'

    Added the "not" to exclude instead of retain the values matching the array...