2016-09-06 9 views
3

私の質問です。私は "queryEqualToValue"を自動IDキーで使用しようとすると、firebaseからデータを取得できません。autoidの子でqueryEqualToValueを使用してデータを取得する方法を教えてください。 Firebase-iOS

self.ref.child(..my child..).queryOrderByChild("name").queryEqualToValue("my name") 

上記の子「名前」の自動子ID。

編集:私のJSONツリーの

  • 学生
    • (オートID)
        • 最初の名前
        • ニックネーム

私の実際のデータはこれを好きではないが、これは実施例の構造のためです。 "first name"に等しいかどうかを本当にチェックしたい。

はここで子供と一緒に使用するクエリの前に私のコード

let ref = FIRDatabase.database().reference() 
ref.child("Students").queryOrderedByChild("name").queryEqualToValue("Jason bourne").observeEventType(.Value, withBlock: { snapshot in 
    print("value : " + snapshot.value) 
} 
+0

あなたはchildByAutoId()を意味しますか?なぜあなたはそれをデータベースから読むときに使うのですか? 私はqueryEqualToValueもソートして使用しています。ここに例があります: ref.child( "posts")。queryOrderByChild( "creator")。queryEqualToValue( "Mike")...子( "posts")の後にchid(postKey)があるはずですが、 queryOrderByChild()を使用して – ZassX

+0

JSONツリーをスニペットではなくテキストとして与えよ – Dravidian

+0

@Dravidian JSONツリー用に編集しました。ありがとうございました – Oniikal3

答えて

4

は次のようになります。その後、queryEqualToValueを使用して、特定のファーストネームの生徒を見つけることができます。

let ref = FIRDatabase.database().referenceWithPath('students').queryOrderByChild("name/first_name").queryEqualToValue("Nathapong") 

ref.observeSingleEventOfType(.ChildAdded, block: { snapshot in 
    print(snapshot) 
}) 
+1

に変更されました。私は( "name/first_name")で修正します。多くのありがとう – Oniikal3

+0

あなたは大歓迎です! – Callam

0

だ、あなたはデータベースのルールでは、この使用して".indexOn":["name"]を指定する必要があります。あなたがそれを必要な場所に行くことができる例

{ 
    "rules":{ 
     ".write": "true", 
     ".read": "true", 
     "Students": { 
      "$key": { 
       ".indexOn":["name"] 
      } 
     } 
    } 
} 

あなたの読み取り/書き込みルール

ため documentationを参照してください。 .indexOnは別のルールと同じように、 .validate

+0

ありがとうDima、私のデータ構造を編集しました。どうぞご覧ください。 – Oniikal3

+0

@ Oniikal3 updated Answer –

+0

これは正しい方法ですが、これもなくてもうまくいくはずです。 – ZassX

0

のようになります。間違いやデータを挿入した場合は、名前を確認してください。

{ 
    "students": { 
     1: { 
      "name": { 
       "first_name": "Nathapong", 
       "nick_name": "Oniikal3" 
      } 
     } 
    } 
} 

あなたは、イベントタイプChildAddedで学生パスを観察し、子キーname/first_nameでクエリを注文することができます:あなたのリアルタイムのデータベースを考える

self.ref.child("Students").child("name").queryOrderedByChild("first name").queryEqualToValue("my name").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 
    print(snapshot.value) 
} 
+1

私は確信していた、彼はそれをコードで持っています。しかし、良い点 –

+0

私はこの解決策で試したことがありますが、それは動作しません。それでもnullが返されます。 – Oniikal3

+0

@ Oniikal3あなたが見ることができるようにいくつかのコードを貼り付けることができますか? – ZassX

関連する問題