2016-07-13 30 views
5

Verilerim denormalized ve firebase ekibi tarafından önerilen gibi bir ters indis kullanır. Benzer şey:Firebase Veritabanı - Çoklu Girişleri Geri Al

{ 
    "users": { 
    "alovelace": { 
     "name": "Ada Lovelace", 
     // Index Ada's groups in her profile 
     "groups": { 
     // the value here doesn't matter, just that the key exists 
     "techpioneers": true, 
     "womentechmakers": true 
     } 
    }, 
    ... 
    }, 
    "groups": { 
    "techpioneers": { 
     "name": "Historical Tech Pioneers", 
     "members": { 
     "alovelace": true, 
     "ghopper": true, 
     "eclarke": true 
     } 
    }, 
    ... 
    } 
} 

Artık tüm Ada gruplarını yüklemek istiyorum. Kullanıcı nesnesinin bir parçası olduğu için ait olduğu grup kimliklerini kolayca alabilirim.

Tüm Ada'nın belirli gruplarını bir kerede ID ile sorgulamamın bir yolu var mı? Veya grup kimliği başına bir ValueEventListener oluşturmam ve her bir grubu ayrı olarak talep etmem gerekiyor mu?

Güvenlik tarafında - her grubun yalnızca üyeleri tarafından okunabileceğini varsayalım, bu yüzden tüm grupları sorgulayamıyorum ve bunları sonra sıralayamıyorum.

+0

Çoğu uygulamalar ve tek tek her grup yükleyin. Firebase veritabanı taleplerini aktardığı için bu büyük bir performans tahliyesi değil. Http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786 –

+0

@FrankvanPuffelen Do demek istediğim, listeden geçip her biri için bir “ValueEventListener” kurarsam, DB, verileri kendi başına alma şeklini optimize eder mi? Veya verileri belirli bir şekilde talep etmek zorunda mıyım? –

+0

Tüm istekler aynı bağlantıdan geçer. Get (1) ',' get (2) ',' get (3) 've' getAll ([1,2,3]) 'arasındaki tek fark, kareler için bir miktar yüktür. –

cevap

1

ben gibi bir şey yapabileceğini tahmin:

var ref = new Firebase("<..>/groups"); 
ref.orderByChild("members/alovelace").equalTo(true) 
    .once('value').then(function(dataSnapshot) { 
    // handle read data 
}) 

(Untested, ancak this Derin Sorgular göre artık destekleniyor) dizinden tuşları aracılığıyla

+0

Android kullanmak için bir cevap döndürene kadar bekleyin bunu kullanın: Sorgu sorgu = mFirebaseDatabaseReference.child ("gruplar") orderByChild ("üye /" + user.getId()) equalTo (doğru).; . Bu tüm veriler için bir sorgu! – itzhar

+0

Bu yaklaşımın iki dezavantajı vardır: IMO: Öncelikle, güvenlik açısından - her kullanıcı 'gruplar 'ağacının tamamını okuyabilir ve ikincisi, Çok sayıda grubum varsa bu muhtemelen biraz yavaş ve savurgan olur. Ben zaten ilgilendiğim grupların tam kimliklerini biliyorum - bunu kullanmak için utanç verici görünüyor. –

İlgili konular