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
子供のための真の価値のために分解されたノード上でクエリを実行
ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded,
withBlock: { snapshot in
print(snapshot.key)
})
をLERに等しく、Firebaseがサポートされていないので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 *)。また、私は約200,000人の人が私のデータベースにいるつもりです。それは拡大縮小しますか? – MoreScratch
スケールすることができますが(Firebaseはスケーラブルですが)、そのサイズのデータセットでは現実的ではないでしょう。自動入力のようなものを探していたら、姓の最初の数文字を入力すると、より現実的です。名前を投げることができるObjCクラスを作りました。名前をすべての検索可能な組み合わせに分解し、Firebaseノードに保存します。それはかなり自動化されていると感じていますが、私たちは何千もの名前で作業しようとしていません。おそらくFirebaseチームにとっては良い質問です。 – Jay
データベースのすべての文字列フィールドでワイルドカード検索を行いたいとしたら、N個の組み合わせで各フィールドの各値を分解するのは実行不可能です – Oswaldo