2016-12-11 18 views
0

私のアプリでは、連絡先情報のデータを検索して、自分のデータベースにすでに存在するかどうかを確認する機能が必要です。ユーザーが複数のメールアドレスを持っている可能性があるので、私はこのデータをContactInfoという別のクラスに保存しています。Firebaseのオブジェクト配列内の検索キー

今、すべてのオブジェクトを照会し、 emailsの配列ContactInfoにメールが含まれているかどうかをチェックしたいと思います。したがって、電子メールをキーとして使用しているため、URLエンコードされています。しかし、私はこれを達成するための正しいクエリを理解することはできません。


のContactInfo

  • -KYd3pbZ7D - yX6B3HY8
    • 電子メール
      • ジョン%40gmail%2Ecom:真
      • ジョン%40hotmail%2Ecom:真
    • ファーストネーム:ジョン
    • 姓:Doeの
  • -KYdUDoMVOdUmJ4I3jO-
    • 電子メール
      • ジェーン%40gmail%2Ecom:真
    • ファーストネーム:ジェーン
    • 姓:Doeの

は私のデータベースのトップレベルのキーはあなたが何をしたいのか、おそらくないとして電子メールアドレスを使用して、この

enter image description here

+0

2つのすばらしいこと:1)質問の構造の画像を投稿しないでください。実際のテキストバージョンを投稿してください。私たちの答えにコピー/ペーストして検索することもできます。 2)あなたの質問には「配列」と書かれていて、実際にあなたの構造にFirebase配列はありません。これは良いことです(配列を使用しないでください)が、おそらく質問のタイトルを更新する必要があります。 – Jay

答えて

2

ようになっていることに基づきます。

電子メールアドレスは変更され、動的データとみなされます。変化するかのように動的データ(変更可能なもの)をキーとして使用しないことをお勧めします。データベース内で参照される場所はすべて更新する必要があります。

一つの可能​​性は、以下のような複数の電子メールを格納することである:電子メールの全てについて、次に

contactInfo 
    -KYd3pbZ7D--yX6B3HY8 
     firstname: "John" 
     lastname: "Doe" 
     main_email: "-JYJkjajisaiisd" 

と別のノード。

contact_emails 
    -JYJkjajisaiisd 
     email : "[email protected]" 
     uid : "uid_0" 
    -YJNlkokaosomdo 
     email : "[email protected]", 
     uid : "uid_0" 
    -Juiaisidiasda 
     email : "[email protected]", 
     uid : "uid_3" 

この構造は、保守、クエリことができ、キーなどの特殊文字(電子メールの文字)を格納/パースを心配する必要がなくなります。あなたは一人につき複数の電子メールを保存することができますし、あなただけの電子メールをチェックするために彼らのContactInfo

内main_emailノードを更新することによって、彼らの主なメールアドレスを変更することができ、このクエリを使用

contactEmailsRef.queryOrdered(byChild:"email") 
      .queryEqual(toValue: "[email protected]") 
      .observeSingleEvent(of: .value, with: { snapshot in 

       print(snapshot) 

    }) 

このノードが

を印刷されているになります
-YJNlkokaosomdo 
    email : "[email protected]", 
    uid : "uid_0" 
+0

あなたの素敵な答えに感謝します。電子メールをキーとして使用することに関するあなたの要点を完全に理解しています。しかし、私はまだ、どのようにクエリをチェックするように見えるかわからない、たとえば。 "[email protected]"がシステムに存在します(つまり、すべての 'contactInfo'オブジェクトを通過します) – gpichler

+0

@ user1463853すごいコメントです!私は私の元の答えを忘れてしまったので、質問に正しく答えるために更新されました。この場合、クローズに有効なスナップショットがある場合、電子メールが検出され、すでに存在しています。スナップショットがnullの場合は存在しません。 – Jay

+0

あなたの素晴らしい答えをありがとう。 :) – gpichler

関連する問題