こんな感じのデータです。
users - user1 - user2 - user3
pathでkeyまで指定して、onceで取得するのを繰り返すで実装していますが、
できれば、Keyを複数件指定して、一度にまとめて取得したいです。
他に方法があれば教えてください!!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
[users]で全てまとめて取るのはだめなのでしょうか?
もし、[user1]と[user3]だけをselectしたい場合は、FirebaseのAPIのみでは不可能かと思われます。
複数のPathに対して、それぞれでselectするしかありません。
dispatch_group_enterを利用すると多少楽になります。
下記例は、ReactiveCococaで処理しちゃってますが、参考になるかもしれません。
Swift
1 func readDataAtPaths(paths:Array<String>, baseRef:FIRDatabaseReference) -> RACSignal { 2 var results = [String: FIRDataSnapshot]() 3 var errors = [String: NSError]() 4 let dispatchGroup : dispatch_group_t = dispatch_group_create() 5 return RACSignal.createSignal({ (subscriber) -> RACDisposable! in 6 for path in paths { 7 dispatch_group_enter(dispatchGroup) 8 baseRef.child(path).observeSingleEventOfType(.Value, withBlock: { snapshot in 9 results[path] = snapshot 10 dispatch_group_leave(dispatchGroup) 11 }, withCancelBlock: { error in 12 errors[path] = error 13 dispatch_group_leave(dispatchGroup) 14 }) 15 } 16 dispatch_group_notify(dispatchGroup, dispatch_get_main_queue()) { 17 if errors.count > 0 { 18 subscriber.sendNext(nil) 19 } else { 20 subscriber.sendNext(results) 21 } 22 subscriber.sendCompleted() 23 } 24 return RACDisposable(block: { () -> Void in 25 }) 26 }) 27 }
投稿2016/12/06 05:33
総合スコア20
0
Webですか?Android、iOSですか?
ひとまずWebとして説明します。
いくつかやり方があります。
- 個々のuserにグループ分けの情報を持たせ、一致するuserだけ取得
この程度のクエリなら実行できます。
ただし、前もって取得したいグループがわかる場合でないと難しいです。
- Firestoreに移行し、一括処理機能を使う
最近発表されたFirebaseの新しいデータベースです。
高機能ですが移行の手間がかかります。また、リアルタイム性はrealtime databaseのほうが高いです。
- 全部取得してからクライアントサイドで必要な情報のみ抽出
面倒だったり無駄にFirebaseの料金取られたりするのでおすすめしません。
どれか興味があれば、言っていただければもう少し詳しく説明します。
投稿2017/11/01 09:40
編集2017/11/01 09:42総合スコア1159
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。