Query language

The Realm JavaScript SDK supports querying based on a language inspired by NSPredicate.

The Collection.filtered() method is used to query a Realm:

let contacts = realm.objects('Contact');
let friendsPage2 = contacts.filtered('type == "friend" AND name BEGINSWITH "B"');

It's possible to filter by linked or child objects with a keypath.


let johnsChildren = realm.Object('Contact').filtered('father.name == "John"');

Query strings can use numbered ($0, $1, ...) placeholders. The succeeding parameters contain the values. Named placeholders are not yet supported.


let merlots = wines.filtered('variety == $0 && vintage <= $1', 'Merlot', maxYear);

Relational operators

You can use equality comparison on all property types: == and !=

Furthermore, the following can be used on numerical types: <, <=, >, >=


let oldContacts = realm.objects('Contact').filtered('age > 2');

Note that for boolean properties, you should test against the expected keyword.


let women = realm.objects('Contact').filtered('isMale == false');

String operators

For string properties, prefix, suffix, and substring queries are supported by using the BEGINSWITH, ENDSWITH, and CONTAINS operators.

For any string operation you can append [c] to the operator to make it case insensitive.


let peopleWhoseNameContainsA = realm.objects('Contact').filtered('name CONTAINS[c] "a"');
let Johns = realm.objects('Contact').filtered('name ==[c] "john"');


Use parentheses and the &&/AND and ||/OR operators to compose queries. You can negate a predicate with !/NOT.