- Каков наилучший и наиболее эффективный способ сделать это в FaunaDB?
Этот запрос может быть выполнен с использованием функции Range при условии, что вы иметь следующий индекс:
> CreateIndex({
name: "sal_by_deptno",
source: Collection("emp"),
terms: [ { field: ['data', 'deptno'] } ],
values: [ { field: ['data', 'sal'] }, { field: 'ref' } ]
})
Вы можете сделать запрос следующим образом:
> Paginate(Range(Match(Index("sal_by_deptno"), 10), [2000], []))
{
data: [
[ 2000, Ref(Collection("emp"), "260259607265411603") ],
[ 3000, Ref(Collection("emp"), "260259610695303699") ]
]
}
Можно ли сделать # 1 с помощью функции intersection ()?
Пересечение (и другие функции набора) работает только в том случае, если все операнды имеют одинаковый формат, поэтому я не думаю, что это будет полезно в этом контексте.
Если вы хотите получить запрос ниже, как бы он выполнялся с FQL?
Paginate(
Union(
Range(Match(Index("sal_by_deptno"), 10), [2000], []),
Range(Match(Index("sal_by_deptno"), 10), [], [499.99])
)
)
Или эквивалентен объединению, так что это функция Вы должны использовать в этом контексте. Имейте в виду, что функция Range является включающей, поэтому для симуляции <оператора мне пришлось использовать значение меньше 500 </p>
А как насчет этого запроса в FQL?
Для этого вам понадобится второй индекс, а затем используйте Join function
CreateIndex({
name: "age_by_ref",
source: Collection("emp"),
terms: [{field: 'ref'}],
values: [{field: ['data', 'age']}, {field: 'ref'}]
})
Затем задайте вопрос:
Paginate(
Join(
Union(
Range(Match(Index("sal_by_deptno"), 10), [2000], []),
Range(Match(Index("sal_by_deptno"), 10), [], [499.99])
),
Lambda((sal, ref) => Range(Match(Index("age_by_ref"), ref), [22], []))
)
)
Приведенные выше решения ни в коем случае не являются окончательным решением, это всего лишь одно из возможных решений, которое возникло у меня в голове, когда я отвечал на этот вопрос.