[[condition-compare]] ==== Compare Condition A watch <> that simply compares a value in the <> to given value. The value in the model is identified by a path within that model. While limited in its functionality, the advantage of this condition over the <> is that you do not have to enable dynamic scripting to use compare conditions. ===== Using a Compare Condition The following snippet configures a `compare` condition that returns `true` if the number of the total hits in the search result (typically loaded by the <>) is higher or equals 5: [source,json] -------------------------------------------------- { ... "condition" : { "compare" : { "ctx.payload.hits.total" : { <1> "gte" : 5 <2> } } ... } -------------------------------------------------- <1> The field name is the path to the execution context model <2> The field name (here `gte`) is the comparison operator, and the value is the value to compare to. The path is a "dot-notation" expression that can reference the following variables in the watch context: [options="header"] |====== | Name | Description | `ctx.watch_id` | The id of the watch that is currently executing. | `ctx.execution_time` | The time execution of this watch started. | `ctx.trigger.triggered_time` | The time this watch was triggered. | `ctx.trigger.scheduled_time` | The time this watch was supposed to be triggered. | `ctx.metadata.*` | Any metadata associated with the watch. | `ctx.payload.*` | The payload data loaded by the watch's input. |====== TIP: You can reference entries in arrays using their zero-based array indices. For example, to access the third element of the `ctx.payload.hits.hits` array, use `ctx.payload.hits.hits.2`. [[condition-compare-operators]] The comparison operator can be any one of the following: [options="header"] |====== | Name | Description | `eq` | Returns `true` when the resolved value equals the given one (applies to numeric, string, list, object and values) | `not_eq` | Returns `true` when the resolved value does not equal the given one (applies to numeric, string, list, object and null values) | `gt` | Returns `true` when the resolved value is greater than the given one (applies to numeric and string values) | `gte` | Returns `true` when the resolved value is greater/equal than/to the given one (applies to numeric and string values) | `lt` | Returns `true` when the resolved value is less than the given one (applies to numeric and string values) | `lte` | Returns `true` when the resolved value is less/equal than/to the given one (applies to numeric and string values) |====== When dealing with dates/times, the specified value can hold date math expression in the form of `<{expression}>`. For example, one can compare the watch execution time as follows: [source,json] -------------------------------------------------- { ... "condition" : { "compare" : { "ctx.execution_time" : { "gte" : "<{now-5m}>" } } ... } -------------------------------------------------- It is also possible to compare one value in the context model to another value in the same model. This can be done by specifying the compared value as a path in the form of `{{path}}`. The following snippet shows a condition that compares two values in the payload [source,json] -------------------------------------------------- { ... "condition" : { "compare" : { "ctx.payload.aggregations.status.buckets.error.doc_count" : { "not_eq" : "{{ctx.payload.aggregations.handled.buckets.true.doc_count}}" } } ... } --------------------------------------------------