Firebaseでワイルドカードクエリを実行することは可能ですか?例えば:
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
久しぶりですが、他の人も興味があるのではないかと思いました。 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))")
}
これは、name
プロパティの開始値と終了値を使用します。ここで、終了キーは、開始+ Unicode範囲の非常に高いコードポイントに等しくなります。 Unicodeのほとんどの通常の文字の後にあるため、クエリはfoo
で始まるすべての値に一致します。
いいえ。でもちょっと。
ワイルドカードクエリを実行することはできませんが、これを可能にするデータを構造化することはできます。
たとえば、名前がLerで始まるユーザーに一致するものを検索するとします。
これが私たちの構造です
users
uid_0
name: "Leroy"
分解されたデータを別のノードに保存します。ディスク容量は安価であることを忘れないでください。
decomposed
uid_0
L: true
Le: true
Ler: true
Lero: true
Leroy: true
次に、分解されたノードで、Lerに等しい子のtrueの値についてクエリを実行します。
ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
そして、snapshot.keyはuid_0になります
あなたはこのようなことをすることができます。
検索フィールドは必ずアルファベット順に並べてください。
次に、最後の文字「o」が最初の最後の文字「n」+ 1で計算されるすべての名前(Lunで始まりLuoで終わる)を検索します。
ここに一般的な考え方があります。
したがって、「Lun *」の間にあるものを返し、「Luo *」の最初のエントリで停止する必要があります。
https://foo.firebaseio.com/person.json?orderBy="name"&startAt="Lun"&endAt="Luo"