2016-08-15 11 views
1

firebaseに1対多のデー​​タ構造を作成しようとしています。私の2つのオブジェクトは、このように見える1対多数のfirebaseクエリ

category: 
{ 
    cat1: { 
     name: 'Category 1' 
    }, 
    cat2: { 
     name: 'Category 2' 
    } 
} 

products: 
{ 
    product1: { 
    name: 'Product 1', 
    categories: { 
     cat1: true 
    } 
    }, 
    product2: { 
    name: 'Product 2', 
    categories: { 
     cat1: true, 
     cat2: true 
    } 
    } 
} 

ここで、どのようにして正確にこのデータをクエリして、すべてのカテゴリでproduct2と言うことができますか?

var ref = new Firebase("https://<my-firebase-url>/products/product2"); 
    var catRef = new Firebase("https://<my-firebase-url>/category"); 
    ref.once('value', function(snap) { 
     var result = snap.val(); 
     Object.keys(result.categories).map(key => { 
     catRef.child(key).once('value', function(category){ 
... //add category to array etc 
     } 
     } 
    } 

は、ドキュメントがchild_addedイベントを使用することをお勧め....私は必要なデータを私に戻って取得され、これを試してみましたが、それは非効率ですし、ドキュメントは、あなたがそれを行う示唆するように見える方法が一致していませんが、子どもが追加されたときだけでなく、リスト全体が欲しいときに、これはどのように意味がありますか? (https://www.firebase.com/docs/web/guide/structuring-data.html):

// List the names of all Mary's groups 
var ref = new Firebase("https://docs-examples.firebaseio.com/web/org"); 
// fetch a list of Mary's groups 
ref.child("users/mchen/groups").on('child_added', function(snapshot) { 
    // for each group, fetch the name and print it 
    String groupKey = snapshot.key(); 
    ref.child("groups/" + groupKey + "/name").once('value', function(snapshot) { 
    System.out.println("Mary is a member of this group: " + snapshot.val()); 
    }); 
}); 
+0

ドキュメントは廃止されています。新しいウェブサイトfirebase.google.comを使って、 'child_added'に関しては、新しく追加された子だけでなく、既存の子も検索します。 Firebase [アップグレードガイド](https://firebase.google.com/support/guides/firebase-web)をご覧ください。 –

+1

"ループロード"の効率について。これは、Firebaseの新しい開発者の共通の関心事です。しかし、Firebaseはアイテムを単一の接続とパイプラインリクエストでロードするので、通常はかなりのサイズのデータ​​セットではかなり高速です。詳しい説明はhttp://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786を参照してください。 。 –

答えて

3

がproduct2に属しているすべてのカテゴリを取得するには、使用する必要があります。firebase.com上

firebase.database().ref('products/product2/categories').on('child_added', snapshot => { 
    firebase.database().ref('category/'+snapshot.key).on('value', snap => { 
     console.log(snap.val().name + ' belongs to product2'); //Will print Category 1 and Category 2 
    }); 
}): 
関連する問題