Here’s the problem I would like to solve with aggregate:
Given N interval sets of the form of [[l_1, r_1], [l_2, r_2], … [l_n, r_n]], the task is to find the intersections on all interval sets. An intersection is an interval set that lies within all of the given interval sets. If no such intersections exists then return [].
Example 1
N_1 = [[1, 4] [6, 7], [10, 16]]
N_2 = [[0, 20]]
N_3 = [[6, 10], [14, 20]]
Output:
[6, 7], [14, 16]
Reason:
Intersections on all N interval sets are [6, 7] and [14, 16] because only these two satisfies N_1, N_2 and N_3.
Example 2
N_1 = [[1, 2] [10, 18]]
N_2 = [[3, 5]]
Output:
[]
Reason:
No intersections between N_1 and N_2
Example 3
collection = [
{ set: "N_1", start: 1, end: 4 },
{ set: "N_1", start: 6, end: 10 },
{ set: "N_2", start: 0, end: 10 }
]
await db.collection.aggregate(CleverAggregate())
Output:
[[1, 4], [6,10]]
Big picutre
Each set interval represents event with type
, startDate
and endDate
. I need to know exact date ranges when event.type = 'failure'
happened, only if event.type = 'highPriority'
and event.type = 'production'
occurred. I need to perform such analysis on around 30M entries but I expect that the resulting array will have less than 100 elements.
Thank you for any guides or help.