当我尝试通过电子邮件或电话号码查找记录时,我一直在使用以下两个代码,有时第一个代码可以正常工作,有时不起作用,第二个代码也相同。
下面的代码与何时应使用“ equalTo” 或“ startAt and endAt” 有什么区别?
ref.orderByChild("email")
.equalTo(str)
和
ref.orderByChild("email")
.startAt(str)
.endAt(str+"\\uf8ff")
答案 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中的最后一个字符,因此可以用作结尾保护。
检查此项以进行查询:
答案 1 :(得分:1)
在某些情况下,您确实可以使用第一种方法或另一种方法来实现相同的目的,但是根据filtering data的官方文档,每种方法的目的都不同:
equalTo()-根据选择的排序方法,返回等于指定键或值的项目。
startAt()-根据选择的排序方法,返回大于或等于指定键或值的项目。
endAt()-根据选择的排序方法,返回小于或等于指定键或值的项目。
但是,结论是,当您想要完美搭配时,请使用第一种方法。当您要过滤以某些字符开头的数据时,第二种方法通常用于搜索查询。在SQL方面,请注意,Firebase中没有与LIKE
子句等效的子句,但是使用第二种方法,我们可以模拟完全相同的行为。