Query
@dynamicMemberLookup
public struct Query<T>
Query
is a class used to create type-safe query predicates.
With Query
you are given the ability to create Swift style query expression that will then
be constructed into an NSPredicate
. The Query
class should not be instantiated directly
and should be only used as a parameter within a closure that takes a query expression as an argument.
Example:
public func where(_ query: ((Query<Element>) -> Query<Element>)) -> Results<Element>
You would then use the above function like so:
let results = realm.objects(Person.self).query {
$0.name == "Foo" || $0.name == "Bar" && $0.age >= 21
}
Supported predicate types
Prefix
- NOT
!
swift let results = realm.objects(Person.self).query { !$0.dogsName.contains("Fido") || !$0.name.contains("Foo") }
Comparisions
- Equals
==
- Not Equals
!=
- Greater Than
>
- Less Than
<
- Greater Than or Equal
>=
- Less Than or Equal
<=
- Between
.contains(_ range:)
Collections
- IN
.contains(_ element:)
- Between
.contains(_ range:)
Map
- @allKeys
.keys
- @allValues
.values
Compound
- AND
&&
- OR
||
Collection Aggregation
- @avg
.avg
- @min
.min
- @max
.max
- @sum
.sum
- @count
.count
swift let results = realm.objects(Person.self).query { !$0.dogs.age.avg >= 0 || !$0.dogsAgesArray.avg >= 0 }
Other
- NOT
!
- Subquery
($0.fooList.intCol >= 5).count > n
-
Checks if the value is present in the collection.
Declaration
Swift
public func `in`<U>(_ collection: U) -> Query<Bool> where T == U.Element, U : Sequence
-
For testing purposes only. Do not use directly.
Declaration
Swift
public static func _constructForTesting() -> Query<T>
-
Constructs an NSPredicate compatible string with its accompanying arguments.
Note
This is for internal use only and is exposed for testing purposes.Declaration
Swift
public func _constructPredicate() -> (String, [Any])
-
Query all indexes or keys in a mixed nested collecttion.
Declaration
Swift
public var any: Query<AnyRealmValue> { get }
-
Query the count of the objects in the collection.
Declaration
Swift
public var count: Query<Int> { get }
-
Checks if an element exists in this collection.
Declaration
Swift
public func contains(_ value: T.Element) -> Query<Bool>
-
Checks if any elements contained in the given array are present in the collection.
Declaration
Swift
public func containsAny<U>(in collection: U) -> Query<Bool> where U : Sequence, T.Element == U.Element
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T.Element>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T.Element>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T.Element.Wrapped>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T.Element.Wrapped>) -> Query<Bool>
-
Returns the minimum value in the collection.
Declaration
Swift
public var min: Query<T.Element> { get }
-
Returns the maximum value in the collection.
Declaration
Swift
public var max: Query<T.Element> { get }
-
Returns the average in the collection.
Declaration
Swift
public var avg: Query<T.Element> { get }
-
Returns the sum of all the values in the collection.
Declaration
Swift
public var sum: Query<T.Element> { get }
-
Checks if any elements contained in the given array are present in the map’s values.
Declaration
Swift
public func containsAny<U>(in collection: U) -> Query<Bool> where U : Sequence, T.Value == U.Element
-
Checks if an element exists in this collection.
Declaration
Swift
public func contains(_ value: T.Value) -> Query<Bool>
-
Allows a query over all values in the Map.
Declaration
Swift
public var values: Query<T.Value> { get }
-
Allows a query over all keys in the
Map
.Declaration
Swift
public var keys: Query<String> { get }
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T.Value>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T.Value>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T.Value.Wrapped>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T.Value.Wrapped>) -> Query<Bool>
-
Returns the minimum value in the keyed collection.
Declaration
Swift
public var min: Query<T.Value> { get }
-
Returns the maximum value in the keyed collection.
Declaration
Swift
public var max: Query<T.Value> { get }
-
Returns the average in the keyed collection.
Declaration
Swift
public var avg: Query<T.Value> { get }
-
Returns the sum of all the values in the keyed collection.
Declaration
Swift
public var sum: Query<T.Value> { get }
-
Returns the count of all the values in the keyed collection.
Declaration
Swift
public var count: Query<Int> { get }
-
Query on the rawValue of the Enum rather than the Enum itself.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<T.RawValue> { get }
Available where T
: OptionalProtocol
, T.Wrapped
: PersistableEnum
, T.Wrapped.RawValue
: _RealmSchemaDiscoverable
-
Query on the rawValue of the Enum rather than the Enum itself.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<T.Wrapped.RawValue?> { get }
Available where T
: RealmCollection
, T.Element
: PersistableEnum
, T.Element.RawValue
: RealmCollectionValue
-
Query on the rawValue of the Enums in the collection rather than the Enums themselves.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<AnyRealmCollection<T.Element.RawValue>> { get }
Available where T
: RealmKeyedCollection
, T.Value
: PersistableEnum
, T.Value.RawValue
: RealmCollectionValue
-
Query on the rawValue of the Enums in the collection rather than the Enums themselves.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<Map<T.Key, T.Value.RawValue>> { get }
Available where T
: RealmCollection
, T.Element
: OptionalProtocol
, T.Element.Wrapped
: PersistableEnum
, T.Element.Wrapped.RawValue
: _RealmCollectionValueInsideOptional
-
Query on the rawValue of the Enums in the collection rather than the Enums themselves.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<AnyRealmCollection<T.Element.Wrapped.RawValue?>> { get }
Available where T
: RealmKeyedCollection
, T.Value
: OptionalProtocol
, T.Value.Wrapped
: PersistableEnum
, T.Value.Wrapped.RawValue
: _RealmCollectionValueInsideOptional
-
Query on the rawValue of the Enums in the collection rather than the Enums themselves.
This can be used to write queries which can be expressed on the RawValue but not the enum. For example, this lets you query for
.starts(with:)
on a string enum where the prefix is not a member of the enum.Declaration
Swift
public var rawValue: Query<Map<T.Key, T.Value.Wrapped.RawValue?>> { get }
-
Query on the persistableValue of the value rather than the value itself.
This can be used to write queries which can be expressed on the persisted type but not on the type itself, such as range queries on the persistable value or to query for values which can’t be converted to the mapped type.
For types which don’t conform to PersistableEnum, CustomPersistable or FailableCustomPersistable this doesn’t do anything useful.
Declaration
Swift
public var persistableValue: Query<T.PersistedType> { get }
-
Query on the persistableValue of the values in the collection rather than the values themselves.
This can be used to write queries which can be expressed on the persisted type but not on the type itself, such as range queries on the persistable value or to query for values which can’t be converted to the mapped type.
For types which don’t conform to PersistableEnum, CustomPersistable or FailableCustomPersistable this doesn’t do anything useful.
Declaration
Swift
public var persistableValue: Query<AnyRealmCollection<T.Element.PersistedType>> { get }
-
Query on the persistableValue of the values in the collection rather than the values themselves.
This can be used to write queries which can be expressed on the persisted type but not on the type itself, such as range queries on the persistable value or to query for values which can’t be converted to the mapped type.
For types which don’t conform to PersistableEnum, CustomPersistable or FailableCustomPersistable this doesn’t do anything useful.
Declaration
Swift
public var persistableValue: Query<Map<T.Key, T.Value.PersistedType>> { get }
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T>) -> Query<Bool>
-
Checks for all elements in this collection that equal the given value.
?
and*
are allowed as wildcard characters, where?
matches 1 character and*
matches 0 or more characters.Declaration
Swift
public func like(_ value: T, caseInsensitive: Bool = false) -> Query<Bool>
Parameters
value
value used.
caseInsensitive
true
if it is a case-insensitive search. -
Checks for all elements in this collection that equal the given value.
?
and*
are allowed as wildcard characters, where?
matches 1 character and*
matches 0 or more characters.Declaration
Swift
public func like<U>(_ column: Query<U>, caseInsensitive: Bool = false) -> Query<Bool>
Parameters
value
value used.
caseInsensitive
true
if it is a case-insensitive search.
-
Checks for all elements in this collection that contains the given value.
Declaration
Swift
public func contains(_ value: T, options: StringOptions = []) -> Query<Bool>
Parameters
value
value used.
options
A Set of options used to evaluate the search query.
-
Compares that this column contains a value in another column.
Declaration
Swift
public func contains<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool> where U : _Persistable, U.PersistedType : _QueryBinary
Parameters
column
The other column.
options
A Set of options used to evaluate the search query.
-
Checks for all elements in this collection that starts with the given value.
Declaration
Swift
public func starts(with value: T, options: StringOptions = []) -> Query<Bool>
Parameters
value
value used.
options
A Set of options used to evaluate the search query.
-
Compares that this column starts with a value in another column.
Declaration
Swift
public func starts<U>(with column: Query<U>, options: StringOptions = []) -> Query<Bool>
Parameters
column
The other column.
options
A Set of options used to evaluate the search query.
-
Checks for all elements in this collection that ends with the given value.
Declaration
Swift
public func ends(with value: T, options: StringOptions = []) -> Query<Bool>
Parameters
value
value used.
options
A Set of options used to evaluate the search query.
-
Compares that this column ends with a value in another column.
Declaration
Swift
public func ends<U>(with column: Query<U>, options: StringOptions = []) -> Query<Bool>
Parameters
column
The other column.
options
A Set of options used to evaluate the search query.
-
Checks for all elements in this collection that equals the given value.
Declaration
Swift
public func equals(_ value: T, options: StringOptions = []) -> Query<Bool>
Parameters
value
value used.
options
A Set of options used to evaluate the search query.
-
Compares that this column is equal to the value in another given column.
Declaration
Swift
public func equals<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool>
Parameters
column
The other column.
options
A Set of options used to evaluate the search query.
-
Checks for all elements in this collection that are not equal to the given value.
Declaration
Swift
public func notEquals(_ value: T, options: StringOptions = []) -> Query<Bool>
Parameters
value
value used.
options
A Set of options used to evaluate the search query.
-
Compares that this column is not equal to the value in another given column.
Declaration
Swift
public func notEquals<U>(_ column: Query<U>, options: StringOptions = []) -> Query<Bool>
Parameters
column
The other column.
options
A Set of options used to evaluate the search query.
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: Range<T.Wrapped>) -> Query<Bool>
-
Checks for all elements in this collection that are within a given range.
Declaration
Swift
public func contains(_ range: ClosedRange<T.Wrapped>) -> Query<Bool>
-
Completes a subquery expression.
- Usage:
(($0.myCollection.age >= 21) && ($0.myCollection.siblings == 4))).count >= 5
Note
Do not mix collections within a subquery expression. It is only permitted to reference a single collection per each subquery.Declaration
Swift
public var count: Query<Int> { get }
- Usage:
-
Returns the minimum value of the objects in the collection based on the keypath.
Declaration
Swift
public var min: Query { get }
-
Returns the maximum value of the objects in the collection based on the keypath.
Declaration
Swift
public var max: Query { get }
-
Returns the average of the objects in the collection based on the keypath.
Declaration
Swift
public var avg: Query { get }
-
Returns the sum of the objects in the collection based on the keypath.
Declaration
Swift
public var sum: Query { get }
-
Use
geoWithin
function to filter objects whose location points lie within a certain area, using a Geospatial shape (GeoBox
,GeoPolygon
orGeoCircle
).Note
There is no dedicated type to store Geospatial points, instead points should be stored as GeoJson-shaped embedded object. Geospatial queries (geoWithin
) can only be executed in such a type of objects and will throw otherwise.See
GeoPoint
Declaration
Swift
func geoWithin<U>(_ value: U) -> Query<Bool> where U : RLMGeospatial