2017-10-27 6 views
0

My Firebase Databaseチャイルドスウィフトの下でAutoIDのFirebaseクエリ

こんにちは!一度に複数のユーザーのために、basicInfo下(20の結果によって制限されたクエリを)

  1. のお子様:私は2つのFirebaseクエリを作成しようとしています。どこname == (some name)例えば、上記のデータベースと、このクエリでは、私は基本的な情報の下で-Kwzhj4pzBJxbb...

  2. すべての子供たちのためにも-Kwz1eoUMPym...のためのすべてのbasicInfoセクションを取得します。

私は両方のクエリのために、AUTOIDキーの下にもbasicInfoキーの下にnameクエリにアプローチする方法を理解することはできません。

これに対する最も論理的なアプローチは何ですか?

+0

私はあなたの情報のデータを1つのタブの下に構造化する必要があると思います。もっとNoSQLのアプローチをしたいのであれば、リアルタイムDBの代わりにFirestoreを使うことができます。あなたが実行する主要なクエリを持っていない限り、情報を分割することはあまり意味がありません。一度、あなたは 'queryorderbyKey()'を簡単に実行します。 –

+0

実際には、データベース内で検索を行う必要があります。一部のユーザーをLIKE句で検索するだけです。 Firebase FirestoreとFirebaseデータベース。ありがとう! –

+0

両方を使用することはお勧めできません。データストア間のデータのやりとりを大事にする必要があるからです。重要なのはデータモデル/アーキテクチャです。 –

答えて

2

Firebase Realtime DatabaseはNoSQLデータベースであり、リスト内の子孫の直接の子孫によってのみフィルタリングすることができます。そのため、あなたはよりフラットなデータ構造を使用する必要がある、とbasicInfofullInfoにあなたのフィールドを分割しないようになります。

users 
|- userId 
    |- name: "John" 
    |- age: 17 
    |- gender: "m" 
    |- birthday: "10.10.2000" 
    ... 

このアプローチでは、あなたはusersノードにリスナーを添付してから使用して、子の値によってフィルタリングすることができますqueryOrderedByChildおよびqueryEqualToValueの方法。例えば、スウィフトでこのような何か:あなたの構造のいずれかで

Database.database().reference().child("users").queryOrderedByChild("name").queryEqualToValue("(some name)").observeSingleEventOfType(.Value, with: { snap in 
    // Do your thing with snap 
}) 

は、あなたがqueryLimitedToFirstqueryLimitedToLastメソッドを使用して結果を制限することができます。例えば、filtering data section of the documentationから:フィルタリングおよび制限の詳細については

// Last 100 posts, these are automatically the 100 most recent 
// due to sorting by push() keys 
let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))! 

次の例では、例ブログアプリは、すべてのユーザーが100件ので最も最近の投稿のリストを取得する方法を示していますSwift/iOSのFirebaseデータについては、working with lists of data on iOS documentationを参照してください。