आपके द्वारा दिया गया कोड स्निपेट वास्तव में डेटा के पूरे सेट को लोड करता है और फिर इसे क्लाइंट-साइड गिना जाता है, जो बड़ी मात्रा में डेटा के लिए धीमा हो सकता है।
फायरबेस के पास वर्तमान में डेटा लोड किए बिना बच्चों को गिनने का एक तरीका नहीं है, लेकिन हम इसे जोड़ने की योजना बनाते हैं।
अभी के लिए, एक समाधान बच्चों की संख्या को बनाए रखने और हर बार जब आप एक नया बच्चा जोड़ते हैं, तो उसे अपडेट करना होगा। आप आइटमों को गिनने के लिए लेनदेन का उपयोग कर सकते हैं, जैसे इस कोड में अपवार्ड ट्रैकिंग:
var upvotesRef = new Firebase('https://docs-examples.firebaseio.com/android/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes');
upvotesRef.transaction(function (current_value) {
return (current_value || 0) + 1;
});
अधिक जानकारी के लिए, https://www.firebase.com/docs/transactions.html देखें
अद्यतन:
फायरबेस ने हाल ही में जारी क्लाउड फ़ंक्शंस। क्लाउड फ़ंक्शंस के साथ, आपको अपना सर्वर बनाने की आवश्यकता नहीं है। आप बस जावास्क्रिप्ट फ़ंक्शन लिख सकते हैं और इसे फायरबेस पर अपलोड कर सकते हैं। जब भी कोई घटना होती है, तो फायरबेस कार्य को ट्रिगर करने के लिए जिम्मेदार होगा।
यदि आप उदाहरण के लिए उल्टी गिनती करना चाहते हैं, तो आपको इस तरह की एक संरचना बनानी चाहिए:
{
"posts" : {
"-JRHTHaIs-jNPLXOQivY" : {
"upvotes_count":5,
"upvotes" : {
"userX" : true,
"userY" : true,
"userZ" : true,
...
}
}
}
}
और फिर नोड के upvotes_count
लिए एक नया लेखन होने पर बढ़ाने के लिए एक जावास्क्रिप्ट फ़ंक्शन लिखें upvotes
।
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.countlikes = functions.database.ref('/posts/$postid/upvotes').onWrite(event => {
return event.data.ref.parent.child('upvotes_count').set(event.data.numChildren());
});
क्लाउड फ़ंक्शंस से कैसे शुरुआत करें, यह जानने के लिए आप डॉक्यूमेंटेशन को पढ़ सकते हैं ।
इसके अलावा, पदों की गिनती का एक और उदाहरण यहाँ है:
https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js
अपडेट जनवरी 2018
हमारे पास अब के बजाय फायरबस डॉक्स बदल गए event
हैं change
और context
।
दिए गए उदाहरण में शिकायत की त्रुटि है event.data
जो अपरिभाषित है। यह पैटर्न बेहतर काम करता है:
exports.countPrescriptions = functions.database.ref(`/prescriptions`).onWrite((change, context) => {
const data = change.after.val();
const count = Object.keys(data).length;
return change.after.ref.child('_count').set(count);
});
`` `