是否可以在Firebase上進行通配符查詢?例如:Firebase上的通配符查詢?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
是否可以在Firebase上進行通配符查詢?例如:Firebase上的通配符查詢?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
不,但有點兒。
你不能做通配符查詢,但是,你可以構造你的數據,這將允許這個。
例如,假設我們要找到用戶的名字匹配與Ler的
開始這是我們的結構
users
uid_0
name: "Leroy"
商店中的另一個節點分解數據:請記住,磁盤空間很便宜。
decomposed
uid_0
L: true
Le: true
Ler: true
Lero: true
Leroy: true
然後分解節點上執行一個查詢,真正爲孩子的價值等於LER
ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
而且snapshot.key將uid_0
由於火力地堡不支持通配符搜索我決定和Apigee BaaS一起去我們公司。
問題的答案如何? – mamu
我需要關閉問題的循環。我很清楚,Firebase中不存在解決方案,因此我們決定只更換我們的BaaS提供商。實質上,根據文檔和對問題的回答,我們無法得到答案。 – MoreScratch
你沒有提供解釋你的問題的解釋,或者它真的回答你的問題。 – Learn2Code
我知道這已經有一段時間了,但我認爲別人可能會感興趣。您可以「僞造」通配符搜索,如foo*
(因此基本上可以搜索以指定字符串開頭的值)。
對於iOS &斯威夫特它應該是這樣的:
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))")
}
這樣做是使用的開始和結束值name
財產哪裏結束鍵等於啓動+非常高的代碼點Unicode範圍。因爲它在Unicode中的大多數常規字符之後,查詢將匹配以foo
開頭的所有值。
輝煌的回答朋友..歡呼聲 –
這是一個有趣的方式來實現我所需要的。唯一的問題是我需要爲名稱的任何部分做一個通配符(例如* roy *)。另外,我將在我的db中擁有〜20萬人。它會縮放嗎? – MoreScratch
它可以擴展,但(Firebase是可擴展的),對於那個數據集的大小來說可能不太現實。如果您只是在尋找類似自動填充的內容,您可以在其中鍵入前幾個字的名稱,姓氏,那麼它更實際。我們製作了一個ObjC類,我們可以將它命名爲名稱,並將名稱分解爲所有可搜索的組合,然後將其存儲在Firebase節點中;這感覺非常自動化,但我們還沒有嘗試使用數千個名稱。這對於Firebase團隊來說可能是個好問題。 – Jay
想象一下,你想在你的數據庫的所有字符串字段中進行通配符搜索,在N個組合中分解每個字段的每個值是不切實際的 – Oswaldo