Язык FQL FaunaDB очень похож на JavaScript (что очень помогает, если вы хотите выполнять условные транзакции и т. Д. c).
По сути, FaunaDB также имеет Map. Учитывая, что ваш индекс содержит только одно значение , которое является ссылкой, вы можете написать это:
q.Map(
q.Paginate(q.Match(q.Index('skus'))),
q.Lambda(x => q.Get(x))
)
Для этого конкретного случая c вам фактически не нужен индекс, так как каждая коллекция имеет встроенный индекс по умолчанию для выбора всех с помощью функции «Документы».
q.Map(
q.Paginate(Documents(Collection('<your collection>'))),
q.Lambda(x => q.Get(x))
)
Теперь, если используемый вами индекс возвращает несколько значений (потому что вы хотите отсортировать что-то другое чем 'ref'), то вам нужно предоставить столько же параметров для лямбды, сколько значений, которые были определены в индексе. Допустим, мой индекс имеет значения ts и ref , потому что я хочу отсортировать их по времени, а затем запрос для получения всех значений:
q.Map(
q.Paginate(q.Match(q.Index('<your index with ts and ref values>'))),
q.Lambda((ts, ref) => q.Get(ref))
)
Значения используются для запросов диапазона / сортировки, но также определяют, что возвращает индекс
Возвращаясь к вашим вопросам:
- Могу ли я запросить все документы за один вызов?
Безусловно, я бы посоветовал вам сделать это. Обратите внимание, что документы, которые вы получите, будут разбиты на страницы автоматически. Вы можете установить размер страницы, предоставив параметр для разбивки на страницы и вернув атрибут «после» или «до», если страница больше. То, что после или до, может быть снова представлено функции Paginate в качестве параметра для получения следующей или предыдущей страницы: https://docs.fauna.com/fauna/current/api/fql/functions/paginate
- Могу ли я сделать такой запрос без index?
Нет, но вы можете использовать встроенный индекс, как описано выше. FaunaDB защищает пользователей от запросов без индекса. Так как это масштабируемая база данных, которая может содержать большие объемы данных и оплачивается по мере выведения go, рекомендуется запретить пользователям стрелять себе в ноги :). Нумерация страниц и обязательные индексы помогают сделать это.
Что касается того, почему FQL отличается. FQL - это язык, который не является декларативным, как многие языки запросов. Вместо этого, вы пишете , как извлекаете данные. Это имеет свои преимущества:
- Путем написания того, как извлекаются данные, вы можете точно предсказать, как ведет себя запрос, который приятно иметь в системе с оплатой по факту go.
- Один и тот же язык может использоваться для правил безопасности или сложных условных транзакций (обновлять определенные объекты или множество объектов в разных коллекциях в зависимости от определенных условий). В Фауне довольно часто пишут запрос, который делает много вещей в одной транзакции.
- Наша разновидность «хранимых процедур», называемых пользовательскими функциями, просто написана на FQL, а не на другом языке.
Запросы также обсуждаются в этом руководстве, которое поставляется с кодом в GitHub. хранилище, которое может дать вам более полную картину: https://css-tricks.com/rethinking-twitter-as-a-serverless-app/