2016-07-13 10 views
5

मेरा डेटा denormalized है और फायरबेस टीम द्वारा सुझाए गए रिवर्स इंडेक्स का उपयोग करता है। कुछ इसी प्रकार:फायरबेस डाटाबेस - एकाधिक प्रविष्टियां पुनर्प्राप्त करें

{ 
    "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 
     } 
    }, 
    ... 
    } 
} 

अब मैं सभी एडा के समूहों को लोड करना चाहता हूं। मैं आसानी से उस समूह आईडी की एक सूची प्राप्त कर सकता हूं, जो वह उसके उपयोगकर्ता ऑब्जेक्ट का हिस्सा है।

क्या मेरे द्वारा आईडी द्वारा सभी एडी के विशिष्ट समूहों को एक बार में पूछने का कोई तरीका है? या मुझे प्रति समूह आईडी ValueEventListener बनाने और प्रत्येक समूह को अलग से अनुरोध करने की आवश्यकता है?

सुरक्षा पक्ष पर - मान लीजिए कि प्रत्येक समूह केवल अपने सदस्यों द्वारा पठनीय है, इसलिए मैं सभी समूहों से पूछताछ नहीं कर सकता और तथ्य के बाद उन्हें सॉर्ट नहीं कर सकता।

+0

अधिकांश आवेदनों और व्यक्तिगत रूप से प्रत्येक समूह लोड। यह एक बड़ी प्रदर्शन नाली नहीं है, क्योंकि फायरबेस पावरलाइन डेटाबेस अनुरोधों को पाइपलाइन करता है। Http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-ocial-network-app-by-using-query-instead-of-obse/35932786#35932786 –

+0

@ फ्रैंकवनपफेलन डू देखें आपका मतलब है कि यदि मैं सूची के माध्यम से लूप करता हूं और उनमें से प्रत्येक के लिए 'ValueEventListener' सेट करता हूं, तो डीबी अपने डेटा को पुनर्प्राप्त करने के तरीके को अनुकूलित करेगा? या क्या मुझे डेटा को एक निश्चित तरीके से अनुरोध करना है? –

+0

सभी अनुरोध एक ही कनेक्शन के माध्यम से जाते हैं। 'Get (1)', 'get (2)', 'get (3) 'और' getAll ([1,2,3])' के बीच एकमात्र अंतर फ्रेम के लिए कुछ ओवरहेड है। –

उत्तर

1

मुझे लगता है कि आप की तरह कुछ कर सकता है:

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

(untested है, लेकिन this गहरे प्रश्नों के अनुसार अब समर्थित हैं) सूचकांक से चाबी के माध्यम से

+0

एंड्रॉइड में इसका जवाब न दें: क्वेरी क्वेरी = mFirebaseDatabaseReference.child ("समूह")। ऑर्डरबिल्ड ("सदस्य /" + user.getId()) equalTo (सही)। । यह सभी डेटा के लिए एक सवाल है! – itzhar

+0

इस दृष्टिकोण में 2 दोष हैं आईएमओ: सबसे पहले, एक सुरक्षा दृष्टिकोण से - इसका मतलब है कि हर उपयोगकर्ता पूरे 'समूह' पेड़ को पढ़ सकता है, और दूसरा, यदि मेरे पास बड़ी संख्या में समूह हैं तो यह शायद थोड़ा धीमा और अपर्याप्त होगा। मुझे पहले से ही उन समूहों की सटीक आईडी पता है जिनमें मुझे रूचि है - ऐसा लगता है कि इसका उपयोग न करें। –

संबंधित मुद्दे