2016-08-15 2 views
1

Я пытаюсь создать структуру данных от 1 до многих в firebase. Мои два объекта выглядят так: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 
    } 
    } 
} 

Теперь, как именно я запрошу эти данные, чтобы получить say 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.com теперь осуждаются. Используйте новый сайт: 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.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 
    }); 
}): 
Смежные вопросы