Values
Each of the types mentioned in the data model is a subset of an all-encompassing type called a value.
Comparing and ordering values
While it is unsurprising that a data type can be compared with itself, it may be surprising that different types can also be compared with each other.
This comparison is possible because every type in SurrealDB is a subset of value, and a comparison of any type with another is also simply a comparison of a value with another value. The order of values from least to greatest is:
nonenullboolnumberstringdurationdatetimeuuidarraysetobjectgeometrybytestablerecordfileregexrange
As a result, all of the following return true.
Being able to compare a value with any other value is what makes SurrealDB's record range syntax possible.
The .. open-range syntax also represents an infinite value inside a record range query, making it the greatest possible value and the inverse of NONE, the lowest possible value. A part of a record range query that begins with NONE and ends with .. will thus filter out nothing.
Inside a schema, the keyword any is used to denote any possible value.
Values and truthiness
Any value is considered to be truthy if it is not NONE, NULL, or a default value for the data type. A data type at its default value is one that is empty, such as an empty string or array or object, or a number set to 0.
The following example shows the result of the array::all() method, which checks to see if all of the items inside an array are truthy or not.
As the ! operator reverses the truthiness of a value, a doubling of this operator can also be used to check for truthiness.