复杂的 FQL 过滤器问题 - 大于等于的交集
Complex FQL Filter Question - Intersection of a greater than and equals to
- 在 FaunaDB 中执行此操作的最佳最有效方法是什么?
SELECT * FROM emp WHERE sal >= 2000 AND deptno = 10
2.Can #1 使用 intersection() 函数完成?
- 如果你想查询下面的问题,用 FQL 如何完成?
SELECT * FROM emp WHERE (sal >= 2000 OR sal < 500) AND deptno = 10
- FQL 中的这个查询怎么样?
SELECT * FROM emp WHERE (sal >= 2000 OR sal < 500) AND deptno = 10 AND age > 21
- What is the best most efficient way to do this in 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") ]
]
}
- Can #1 be done using the intersection() function?
Intersection(和其他集合函数)仅在所有操作数具有相同格式时才有效,所以我认为它在那种情况下没有用。
- If you wanted to the below query how would it accomplished with FQL?
Paginate(
Union(
Range(Match(Index("sal_by_deptno"), 10), [2000], []),
Range(Match(Index("sal_by_deptno"), 10), [], [499.99])
)
)
或等同于联合,因此这是您应该在该上下文中使用的函数。请记住,Range 函数是包容性的,因此为了模拟 < 运算符,我必须使用小于 500
的值
- What about this query in FQL?
你需要第二个索引然后使用 Join 函数
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], []))
)
)
以上解决方案绝不是最终解决方案,这只是我回答这个问题时想到的一种可能解决方案。
- 在 FaunaDB 中执行此操作的最佳最有效方法是什么?
SELECT * FROM emp WHERE sal >= 2000 AND deptno = 10
2.Can #1 使用 intersection() 函数完成?
- 如果你想查询下面的问题,用 FQL 如何完成?
SELECT * FROM emp WHERE (sal >= 2000 OR sal < 500) AND deptno = 10
- FQL 中的这个查询怎么样?
SELECT * FROM emp WHERE (sal >= 2000 OR sal < 500) AND deptno = 10 AND age > 21
- What is the best most efficient way to do this in 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") ]
]
}
- Can #1 be done using the intersection() function?
Intersection(和其他集合函数)仅在所有操作数具有相同格式时才有效,所以我认为它在那种情况下没有用。
- If you wanted to the below query how would it accomplished with FQL?
Paginate(
Union(
Range(Match(Index("sal_by_deptno"), 10), [2000], []),
Range(Match(Index("sal_by_deptno"), 10), [], [499.99])
)
)
或等同于联合,因此这是您应该在该上下文中使用的函数。请记住,Range 函数是包容性的,因此为了模拟 < 运算符,我必须使用小于 500
的值
- What about this query in FQL?
你需要第二个索引然后使用 Join 函数
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], []))
)
)
以上解决方案绝不是最终解决方案,这只是我回答这个问题时想到的一种可能解决方案。