Đoạn mã bạn đưa ra thực sự tải toàn bộ tập hợp dữ liệu và sau đó đếm phía máy khách, có thể rất chậm đối với số lượng lớn dữ liệu.
Firebase hiện không có cách đếm trẻ em mà không tải dữ liệu, nhưng chúng tôi có kế hoạch thêm nó.
Hiện tại, một giải pháp sẽ là duy trì số lượng trẻ em và cập nhật nó mỗi khi bạn thêm một đứa trẻ mới. Bạn có thể sử dụng một giao dịch để đếm các mục, như trong mã này theo dõi mã:
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;
});
Để biết thêm thông tin, hãy xem https://www.firebase.com/docs/transilities.html
CẬP NHẬT:
Firebase gần đây đã phát hành Chức năng đám mây. Với Chức năng đám mây, bạn không cần tạo Máy chủ của riêng mình. Bạn chỉ có thể viết các hàm JavaScript và tải nó lên Firebase. Firebase sẽ chịu trách nhiệm kích hoạt các chức năng mỗi khi có sự kiện xảy ra.
Nếu bạn muốn đếm upvote chẳng hạn, bạn nên tạo một cấu trúc tương tự như cấu trúc này:
{
"posts" : {
"-JRHTHaIs-jNPLXOQivY" : {
"upvotes_count":5,
"upvotes" : {
"userX" : true,
"userY" : true,
"userZ" : true,
...
}
}
}
}
Và sau đó viết một hàm javascript để tăng upvotes_count
khi có một ghi mới vào upvotes
nút.
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());
});
Bạn có thể đọc Tài liệu để biết cách bắt đầu với các chức năng đám mây .
Ngoài ra, một ví dụ khác về việc đếm bài đăng ở đây:
https://github.com/firebase/fifts-samples/blob/master/child-count/fifts/index.js
Cập nhật tháng 1 năm 2018
Các tài liệu căn cứ hỏa lực đã thay đổi vì vậy thay vì event
bây giờ chúng ta có change
và context
.
Ví dụ đã đưa ra một lỗi phàn nàn event.data
không xác định. Mẫu này dường như hoạt động tốt hơn:
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);
});
`` `