Important
The SingleStore 9.1 release candidate (RC) gives you the opportunity to preview, evaluate, and provide feedback on new and upcoming features prior to their general availability. In the interim, SingleStore 9.0 is recommended for production workloads, which can later be upgraded to SingleStore 9.1.
BSON_ MATCH_ ANY and BSON_ MATCH_ ANY_ EXISTS
On this page
Checks for the existence of data within a BSON document that matches specified filter conditions.
Syntax
Longhand Syntax
-
The
BSON_function returns 1 if there exists a value in the BSON at the filter path for which the filter predicate evaluates to true.MATCH_ ANY BSON_MATCH_ANY(<filter_predicate>, <bson>, <filter_path>) -
The
BSON_function returns true if there is a value (possibly null) in the BSON at the filter path.MATCH_ ANY_ EXISTS BSON_MATCH_ANY_EXISTS(<bson>, <filter_path>)
Shorthand Syntax
-
filter_is the same as in the longhand syntax.predicate -
filter_is a dot-separated list of keys (as opposed to a comma-separated list of arguments in the longhand syntax).path -
::?indicates the following period-separated values are array/object neutral.For example, each key can either be a direct field of a BSON object or a field of a BSON object within an array. -
EXISTS: As the optional<filter_is omitted in thepredicate> EXISTSfunction, the syntax and behavior of theEXISTSfunction is identical whether using either the shorthand or longhand syntax.BSON_MATCH_ANY(<bson>::?<filter_path>[, <filter_predicate>])
Arguments
-
<bson>: the name of a BSON column or a BSON value. -
filter_: a path specification.path -
Longhand syntax: a comma-separated list of dictionary keys or zero-indexed array positions.
-
Shorthand syntax: a period-separated list of dictionary keys or zero-indexed array positions.
-
-
filter_: an optional predicate expression which is applied to every value matching the filter path.predicate Consists of special built-in functions.
Filter Path
-
The
filter_, which is a set of keys or zero-indexed array positions, is used to recursively extract a BSON value or an element of a BSON array from thepath bsonargument. -
If no
filter_is provided, true is returned if the filter path exists.predicate -
The
filter_is evaluated recursively against the BSON in thepath bsoncolumn using the following rules.-
If the current element identified by the
filter_is an object, the next key in thepath filter_is matched against the keys in the object.path -
If the current element identified by the
filter_is an array, the next key in thepath filter_is either matched as a zero-indexed position in the array or against the keys of any object that is an element of the array.path If both a zero-indexed array match or a key match are possible, the zero-indexed array match will be used. -
It is possible that there are several values in a
bsonvalue which match thefilter_.path In this case, the filter_is applied on all values.predicate The function returns true if the predicate evalutates to true on one of the values.
-
Filter Predicate
-
The
filter_is an optional predicate expression which is applied to every value matching thepredicate filter_.path -
Several special built-in functions are used for the
filter_.predicate The built-in functions that can be used in the filter_include:predicate -
BSON_EXTRACT_ <type> -
BSON_NORMALIZE() -
MATCH_functions, which behave similar to the correspondingPARAM_ <type>_ STRICT() BSON_function.EXTRACT_ <type> Refer to BSON Functions in addition to the descriptions below for more information. -
MATCH_is used for all valid BSON types including true, false, BSON objects, and BSON arrays.PARAM_ BSON() There is intentionally no STRICT here.
-
-
The
filter_is evaluated by running the specified built-in function on the value identified by thepredicate filter_.path If the value at the filter_does not match thepath <type>, the built-in evaluates as SQLNULL. -
MATCH_will evaluate as a SQLPARAM_ <type>_ STRICT() NULLif there is not a match to<type>as defined below:-
MATCH_matches only numeric BSON values (integers/floating point).PARAM_ BIGINT_ STRICT() Rounds to the nearest integer. -
MATCH_matches only BSON booleans (true/false).PARAM_ BOOL_ STRICT() -
MATCH_matches all numeric types (integers/floats).PARAM_ DOUBLE_ STRICT() Unlike BSON_, it will not convert non-numeric types (booleans, strings, BSON objects, and BSON arrays) to double values.EXTRACT_ DOUBLE() -
MATCH_matches only BSON strings.PARAM_ STRING_ STRICT() Unlike BSON_it will not convert non-string types (not enclosed by quotes).EXTRACT_ STRING() Collation is controlled by the json_global variable.extract_ string_ collation -
MATCH_matches only BSON datetime types.PARAM_ DATETIME_ STRICT() -
MATCH_matches only BSON binary types.PARAM_ BINARY_ STRICT()
-
-
MATCH_when added to theELEMENTS BSON_function, matches only the array elements themselves, not the entire array.MATCH_ ANY
Note
Refer to JSON_MATCH_ and examples of the shorthand syntax.
Return Type
-
Return type is
TINYINT. -
Returns 1 or 0 to indicate true or false.
Return Value
-
If a
filter_is provided, returns 1 if the predicate evaulates to true for any value found at thepredicate filter_.path -
If a
filter_is not provided, returns 1 if thepredicate filter_exists in the BSON.path -
Returns
0otherwise.
Examples
Refer to JSON_
Usage of filter_ is shown in the following two queries, both of which return 1:
SELECT BSON_MATCH_ANY(MATCH_PARAM_BIGINT_STRICT() = 10, '[{"a":10}]':>BSON, '0', 'a') AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+SELECT BSON_MATCH_ANY(MATCH_PARAM_BIGINT_STRICT() = 10, '[{"a":10}]':>BSON, 'a') AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+The following examples in this section use this BSON object:
SELECT '{"a": [{ "x": "abc","y": {"key1": true,"key2": false }},{ "m": "cde","n": 234 },{ "p": true },{ "q": null }],"b": true}':>BSON INTO @bsonObj;
Here are some examples:
SELECT BSON_MATCH_ANY(MATCH_PARAM_BIGINT_STRICT() = 234,@bsonObj,'a','n') AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+SELECT BSON_MATCH_ANY(MATCH_PARAM_STRING_STRICT() = "abc",@bsonObj,'a','x') AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+SELECT BSON_MATCH_ANY_EXISTS(@bsonObj, 'a', 'y', 'key2') AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+Last modified: November 11, 2024