Я НЕ ФИРМЕННЫЙ ЭКСПЕРТ , но я думаю, что запрос загрузит все данные для всех голосов.
ЕСЛИ Я НЕ НЕПРАВИЛЬНО запрашиваю все голосов, которые могут быть миллионами, а затем совпадение адреса электронной почты и категории может быть излишним. Я думаю, что вы можете создать плоскую структуру для категорий и поместить каждую категорию под нее, и когда избиратель голосует, поместите свой идентификатор под эту категорию.
like cartegories :|
|
| president|
| |id:jrlkjew34234tlk
| |id:rwjelk343243tjlke
| |id:rjlwekr343ljlerer
| |
| prime minister|
| |id:iorlue4324uoirew
| |id:eri34o3ljlewo234
Теперь, когда каждый раз, когда голоса ставят свой идентификатор под категорию, он пытается проголосовать и запросить только эту категорию и просто найти идентификатор.
Что-то в этом роде
public void vote(Voter voter){
mDatabase.child("categories").child(voter.getCategory()) //getCategory() returns
//string that you will put under categories node, like pm , president etc
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapShot : dataSnapshot.getChildren()){
if(snapShot.getValue(String.class).equals(voter.getVoterId))
// if you get here he can't vote otherwise he can
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Таким образом, вы будете запрашивать определенную категорию голосов, следовательно, быстрый ответ и меньше загрузки и меньше счета, и вы можете пропустить поле категории из голосования, потому что вы сможете подсчитать голос по новой структуре
НЕКОТОРЫЕ, ПОЖАЛУЙСТА, ИСПРАВИТЕ МЕНЯ, ЕСЛИ Я НЕПРАВИЛЬНО
И ОП, скажите, пожалуйста, в чем причина сохранения единственной категории для члена, если участник может голосовать более чем за одну категорию