2016-10-31 6 views
0

Firebaseから2つのテーブルに参加する必要があります。 今、私は以下のようなデータ構造を持っています。Firebaseからの複雑なクエリ

ユーザがログを作成すると、Firebaseから一意のIDを取得します。このIDは、作成したユーザー([email protected])の下に保存されます。

しかし、私はログインしているユーザーだけにログを表示したいのですが、これをどのように達成できますか?今、私はキーを取得することができますが、私はdurationやstartDateのようなデータが必要です。

logs 
    -KVMbJKN1i2vAxzutiYq 
    duration: 14 
    startDate: 28/10/2016 

    -KVMbLL4i_9dwaRZ9REB 
    duration: 28 
    startDate: 01/09/2016 

    -KVMiLwoSY34TZpf8mST 
    duration: 14 
    startDate: 2/2/2016 

users 
    Edl7nDpJWIdNmDVUDn87p31d9mN2 
    email: [email protected] 
    firstName: test 
    imageUrl: URL 
    lastName: test 
    provider: Facebook 

    KX6DRd0k5fasEaqB8vJWiXkp69L2 
    email: [email protected] 
    firstName: test1 
    imageUrl: URL 
    lastName: test1 
    provider: Firebase 

    WRgxyjSpQlUPmeJwfF9I7PhpvHs1 
    email: [email protected] 
    firstName: test2 
    imageUrl: URL 
    lastName: test2 
    logs 
     -KVMbJKN1i2vAxzutiYq: true 
     -KVMbLL4i_9dwaRZ9REB: true 
     -KVMiLwoSY34TZpf8mST: true 
    provider: Firebase 
+0

あなたがしたいことをもっと明確にしてください。 – Dravidian

+0

私が[email protected]としてログインしている場合は、3つのログを表示します。 @Dravidian – Grumme

答えて

1

だけで、特定のノードの目的の場所に照会し、期間たstartDateを取得するには: - ただ、所有しているユーザーを識別する各ログノードに子を追加

FIRDatabase.database().reference().child("user/\(FIRAuth.auth()!.currentUser!.uid)/logs").observeSingleEvent(of: .value, with: {(userSnap) in 

if let SnapDict = userSnap.value as? [String:AnyObject]{ 

for each in SnapDict{ 

    FIRDatabase.database().reference().child("logs/\(each.key)").observeSingleEvent(of: .value , with : {(Snap) in 

    print(Snap.value) 

    }) 
    } 
    } 
}) 
+0

私は私の答えを更新しました – Dravidian

+0

ありがとう!それは完璧に動作します – Grumme

+0

私はどのように日付で私のログを注文することができますか教えてくれますか?今、彼らはランダムに出てくるようです。 – Grumme

0

それ。それぞれにduration、startDate、およびuidがあります。

logs 
    -KVMbJKN1i2vAxzutiYq 
    duration: 14 
    startDate: 28/10/2016 
    uid: WRgxyjSpQlUPmeJwfF9I7PhpvHs1 

このようにして、ログノードはそれを所有するユーザーを指し、ユーザー/ログノードはそのユーザーのログを識別します。

そこから、uid =ログインしたuidのログだけが、スナップショットに必要なログノードと子データを返します。