如何使用DocumentSnapshot计算Firestore中的投票数

时间:2018-02-13 11:07:23

标签: java android firebase google-cloud-firestore

我是Android和Firestore的初学者我想计算数据库中字符串类型的投票数,我想用整数来计算它们,以便在条形图中绘制这些数字。

这是我的数据库

enter image description here

enter image description here

我附上 SeeVoters.java 文件

public class SeeVotes extends AppCompatActivity {

    TextView tv,tv1,tv2;
    private static final String TAG = "MainActivity";
    private DocumentReference mUser;
    private FirebaseFirestore mFirestore;
    private CollectionReference mref;
    private FirebaseAuth mAuth;
    private FirebaseUser mCurrentUser;
    int yescounter,nocounter;
    int i = 0,j = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_see_votes);

        tv=(TextView)findViewById(R.id.textView9);
        tv1=(TextView)findViewById(R.id.textView13);
        tv2=(TextView)findViewById(R.id.textView14);
        Intent intent=getIntent();
        final String vote=intent.getStringExtra("vote");
        tv.setText(vote);

        mFirestore = FirebaseFirestore.getInstance();
        mAuth = FirebaseAuth.getInstance();
        final String current_user_id = mAuth.getCurrentUser().getUid();
        final String uname = mAuth.getCurrentUser().getDisplayName();



        mUser = FirebaseFirestore.getInstance().collection("users").document(current_user_id);



        mUser.collection("Vote").document(vote).collection("see_votes") .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
                {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task)
                    {

                        if (task.isSuccessful())
                        {
                            for (DocumentSnapshot document : task.getResult())
                            {
                               // document.getId();

                                //final String votersname=document.getString("VotersName");
                              //final String votes=document.getString("Votes");

//                                if(votes.equals("Yes"))
//                                {
//                                    i = i+1;
//
//                                }
//                                else if (votes.equals("No"))
//                                {
//                                    j = j + 1;
//                                }
//
//                                yescounter = i;
//                                nocounter = j;

                            }

                        }
                        else
                        {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }

                });
//        Toast.makeText(this, "Yes : " + yescounter , Toast.LENGTH_SHORT).show();
//        Toast.makeText(this, "No : " + nocounter , Toast.LENGTH_SHORT).show();

    }
}

我能做些什么才能把它变成整数值...? 感谢..

1 个答案:

答案 0 :(得分:0)

无法在Cloud Firestore中执行任何聚合查询。您需要找到另一种方法来获得总数。有几种选择:

  • 查询所有投票的文件&#39;是&#39;并在您的客户端应用程序中计算它们,然后为所有“不”#39;票。
  • 如果您不可能每秒获得多于一票,则可以创建一个使用事务更新单个文档的云功能。您可能还需要写入原始文档,并说它已被计算在内。函数需要是幂等的,因此您需要确保投票不会被计算两次。 See this great example
  • 创建一个Cloud Function,将每个投票写入类似BigQuery的内容,并在那里列出投票。
  • 如果您的需求更复杂,请考虑通过Dataflow(或其他Apache Beam提供商)管理数据