2016-10-07 5 views
0

子ノードに基づいてノードのキーを取得しようとしています。ここに私の構造子ノードベースのキーを取得する

コードです:

RESTAURANTS 
    KTNfWKLD0isCsrpys 
     name: “McDonalds” 
     loc: “LA” 
    KTNfWILD0iIkLLekc 
     name: “KFC” 
     loc: “LV” 

コード:

FIRDatabase.database().reference().child("RESTAURANTS").queryOrderedByChild("name").queryEqualToValue("McDonalds").observeEventType(.Value, withBlock: { (snapshot) in 
    print(snapshot.key) 
}, withCancelBlock: nil) 

がどのように私は、クエリ内の "マクドナルド" のキーを得ることができますか?

+0

'print(snapshot.key)'の出力は何ですか? –

+0

"RESTAURANTS"を出力します。 –

答えて

2

スナップショットからキーを取得し、それをループしてキーを1つずつ取得するには、allKeysを使用する必要があります。このコード@FrankバンPuffelenが言ったように、反復処理するこの方法は、子ノードの順序を失う

FIRDatabase.database().reference().child("RESTAURANTS").queryOrderedByChild("name").queryEqualToValue("McDonalds").observeEventType(.Value, withBlock: { (snapshot) in 
    if snapshot.exists() { 
     for key in (snapshot.value?.allKeys)!{ 
      print(key) 
     } 
    } 
} 

を試してみてください。あなたが使用するよりも順序リストを取得したい場合は、 snapshot.childrenを最初に入力してください。

+0

このように反復すると、子ノードの順序が失われることに注意してください。この特定のケースでは問題はありませんが(OPは等価チェックを使用するため)、最初に 'snapshot.children'を繰り返し実行し、各子の' .value'を取得するのが一般的です。 –

+0

私はこれを試して何も印刷しませんでした。 –

+0

@FrankvanPuffelenこんにちは!私はFirebaseでの降順に基づいて注文に関する多くの記事を読んできましたが、私は注文を保つ必要がありますが、子を反復するときに子供から鍵や価値を得るのに問題があります。 iOSでは、子(NSFastEnumerationIterator)にメンバーのキーや値はありません。各子供の下に、私が辞書として持っているデータを返しますが、私はその子供のための鍵が必要です。前もって感謝します!他の投稿のあなたの他のコメントも参考になりました。 –

関連する問題