firebase中的“ equalTo”和“ startAt&endAt”之间有什么区别?何时应使用“ equalTo”或“ startAt and endAt”?

时间:2018-07-31 07:12:02

标签: java android firebase firebase-realtime-database kotlin

当我尝试通过电子邮件或电话号码查找记录时,我一直在使用以下两个代码,有时第一个代码可以正常工作,有时不起作用,第二个代码也相同。

下面的代码与何时应使用“ equalTo” “ startAt and endAt” 有什么区别?

ref.orderByChild("email")
            .equalTo(str)

ref.orderByChild("email")
            .startAt(str)
            .endAt(str+"\\uf8ff")

2 个答案:

答案 0 :(得分:2)

ref.orderByChild("email").equalTo(str)

以上内容表示电子邮件必须等于str的值。就像说WHERE email= 'userx@gmail.com'


ref.orderByChild("email").startAt(str).endAt(str+"\\uf8ff")

这就像说WHERE email LIKE ca%,它将返回所有以"ca"开头的电子邮件

  

public Query startAt (String value)

     

使用给定的orderBy指令或优先级作为默认值,创建一个约束以仅返回值大于或等于给定值的子节点的查询。

     

public Query endAt (String value)

     

使用给定的orderBy指令或优先级作为默认值,创建一个约束以仅返回值小于或等于给定值的子节点的查询。

     

\uf8ff只是unicode中的最后一个字符,因此可以用作结尾保护。

检查此项以进行查询:

https://www.youtube.com/watch?v=sKFLI5FOOHs

答案 1 :(得分:1)

在某些情况下,您确实可以使用第一种方法或另一种方法来实现相同的目的,但是根据filtering data的官方文档,每种方法的目的都不同:

  

equalTo()-根据选择的排序方法,返回等于指定键或值的项目。

     

startAt()-根据选择的排序方法,返回大于或等于指定键或值的项目。

     

endAt()-根据选择的排序方法,返回小于或等于指定键或值的项目。

但是,结论是,当您想要完美搭配时,请使用第一种方法。当您要过滤以某些字符开头的数据时,第二种方法通常用于搜索查询。在SQL方面,请注意,Firebase中没有与LIKE子句等效的子句,但是使用第二种方法,我们可以模拟完全相同的行为。