繁体   English   中英

检查字段是否存在 - 通过 Firestore 数据库搜索

[英]Check if a field exists - search through Firestore database

我正在为学校做一个项目 - android 应用程序在检查 Firestore 的不同数据库中是否有相应的卡号和电话号码后将用户注册到实时数据库。 目前它只验证第一个文档,但如果我在其他文档中搜索它们,它不会找到这些字段。

这是我使用的方法:

    public void checkIfCardExists() {
    Query query = cardInfo.whereEqualTo("CardNo", cardNumber)
            .whereEqualTo("Phone", userPhone);

    query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    boolean documentExists;

                    if (task.isSuccessful()) {
                            Log.d("QueryResult", "Is query result empty: " + task.getResult().isEmpty());
                            documentExists = !task.getResult().isEmpty();

                    }else {
                        Log.e("QueryResult", "Error getting documents.", task.getException());
                        documentExists = false;
                    }

                    if(documentExists) {
                        Log.d("QueryResult", "The document exists");
                        Toast.makeText(com.example.transportticket.RegistrationLeap.this, "Card number found",
                                Toast.LENGTH_SHORT).show();
                        userLeap = new UserLeap(userEmail, userPass, userName, userSurname, cardNumber, userPhone);
                        registerUserLeap(userEmail, userPass);
                        startActivity(new Intent(RegistrationLeap.this, Empty.class));


                    }else{
                        Log.d("QueryResult", "The document doesn't exist or there was an error retrieving it");
                        Toast.makeText(com.example.transportticket.RegistrationLeap.this, "Card number not found",
                                Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(RegistrationLeap.this, Empty.class));
                    }
                }
            });
}

这就是我的 Firestore 数据库看起来像Firestore数据库的样子

我添加了一张照片来说明如何找到第一个文件

如果您使用以下代码行:

Query query = cardInfo.whereEqualTo("CardNo", cardNumber)
        .whereEqualTo("Phone", userPhone);

这意味着您要告诉 Firestore 返回CardNo属性包含cardNumber值且Phone属性包含userPhone值的所有userPhone 因此,如果您的集合中只有一个文档满足此约束,则将返回一个文档。 结果中将不存在其他文档。 你现在所做的,叫做过滤。 但是,如果要获取所有文档,则应删除whereEqualTo()调用或直接使用作为CollectionReference cardInfo的 cardInfo。 这样,您就不会过滤任何内容。 CollectionReference object 基本上是一个没有任何过滤器的查询

因此,使用最后一个解决方案,您可以获得所有文档,还可以在客户端上创建过滤。 这不是推荐的方法,因为获取所有文档的成本非常高。 例如,如果您的集合中有 1000 个文档,则需要支付 1000 次读取操作才能拥有它们。 因此,由您决定哪一个更适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM