2016-04-01 30 views

答えて

2

いいえ。

ワイルドカードクエリを実行することはできませんが、これを可能にするデータを構造化できます。例えば

は、私たちが名前の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が

+2

これは、私が必要とするものを達成するための興味深い方法です。唯一の問題は、名前の一部にワイルドカードを使用する必要があることです(例:* roy *)。また、私は約200,000人の人が私のデータベースにいるつもりです。それは拡大縮小しますか? – MoreScratch

+0

スケールすることができますが(Firebaseはスケーラブルですが)、そのサイズのデータ​​セットでは現実的ではないでしょう。自動入力のようなものを探していたら、姓の最初の数文字を入力すると、より現実的です。名前を投げることができるObjCクラスを作りました。名前をすべての検索可能な組み合わせに分解し、Firebaseノードに保存します。それはかなり自動化されていると感じていますが、私たちは何千もの名前で作業しようとしていません。おそらくFirebaseチームにとっては良い質問です。 – Jay

+1

データベースのすべての文字列フィールドでワイルドカード検索を行いたいとしたら、N個の組み合わせで各フィールドの各値を分解するのは実行不可能です – Oswaldo

-2

をuid_0されますワイルドカード検索私は会社のApigee BaaSに行くことにしました。

+3

あなたの質問に対する答えはどうですか? – mamu

+0

私は質問のループを閉じる必要がありました。 Firebaseにはソリューションが存在しないので、私たちはBaaSプロバイダを単に変更することに決めました。本質的には、ドキュメンテーションとその質問に対する回答に基づいて見ることができる答えはありません。 – MoreScratch

+0

あなたはあなたの問題をどのように解決したのか、本当にあなたの質問に答えたのか説明しません。 – Learn2Code

6

私はそれがしばらくしていることを知っていますが、他の人が興味を持っていると思っていました。 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で始まるすべての値と一致します。

+0

鮮やかな答え友人..歓声 –

関連する問題