Mor*_*tch 10 firebase firebase-realtime-database
是否可以在Firebase上进行通配符查询?例如:
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
Run Code Online (Sandbox Code Playgroud)
我知道已经有一段时间但我认为其他人可能会感兴趣.您可以"伪造"通配符搜索foo*(例如,基本上您可以搜索以指定字符串开头的值).
对于iOS和Swift,它看起来像这样:
dbReference.child("person").queryOrdered(byChild: "name").queryStarting(atValue: "foo").queryEnding(atValue: "foo\u{f8ff}").observe(.childAdded) { (snapshot: FIRDataSnapshot) in
print("\(snapshot.key) - \(String(describing: snapshot.value))")
}
Run Code Online (Sandbox Code Playgroud)
这样做是使用name结束键等于Unicode范围内的开始+非常高的代码点的属性的开始和结束值.因为它在Unicode之后的大多数常规字符之后,所以查询匹配以所有开头的值foo.
不,但是有点。
您无法执行通配符查询,但是,您可以构建允许这样做的数据。
例如,假设我们要查找名称以 Ler 开头的用户的匹配项
这是我们的结构
users
uid_0
name: "Leroy"
Run Code Online (Sandbox Code Playgroud)
将分解的数据存储在另一个节点中:记住,磁盘空间很便宜。
decomposed
uid_0
L: true
Le: true
Ler: true
Lero: true
Leroy: true
Run Code Online (Sandbox Code Playgroud)
然后在分解节点上查询等于 Ler 的子节点的 true 值
ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
Run Code Online (Sandbox Code Playgroud)
snapshot.key 将为 uid_0
| 归档时间: |
|
| 查看次数: |
7418 次 |
| 最近记录: |