На самом деле синтаксис очень простой, постараюсь в двух словах объяснить
Допустим у нас есть коллекция:
var db = new Collection([1, 2, 3, 4, [1, 2, 3]]);
Первый способ, обращение по прямой ссылке:
// обратимся к первому элементу вложенного массива
// функция eq выбирает элемент не по ключу, а по порядку
// минус указывает, что отсчёт идёт с конца
// знак > указывает родительское отношение
db.get('eq(-1) > 0');
Второй способ, итеративный поиск с помощью функции callback:
// выберем элементы с чётными индексами
db.get(function (el, key, data, i, length, cObj, id) {
return i % 2 === 0;
});
Третий способ схож со вторым, т.к. здесь тоже итеративный обход, но вместо прямого указания функции, мы пишем её, строчное сокращение:
// знак : обозначает, что это идёт строчное сокращение, т.е. в нашем случае оно равносильно return
db.get(':i % 2 === 0');
// логично, что мы можем написать и так
db.get(':i % 2 === 0 && el !== 2');
// или так, но здесь компилятор уже создаст 2 разных функции
// вложенность скобок не ограниченна, можно использовать операторы логики: !, &&, ||
db.get('(:i % 2 === 0) && (:el !== 2)');
// также фильтр можно заранее сохранить в стеки (как и многое другое) и обращаться по ИД
// функцию можно указывать в строчном или в явном виде, функция может содержать другие функции
db.pushFilter('odd', ':i % 2 === 0');
// используем фильтр odd и дополнительное условие
db.get('odd && (:el !== 2)');
// вызов фильтра в фильтре
db.pushFilter('filter2', 'odd && (:i % 2 === 0)');
db.get('filter2');
А последний способ - это указание контекста для фильтра, формула написания такова: контекст + >> + условие. Разумеется - это лишь малая часть возможностей, но сегодня буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока.