Android Firestore,查询数组

Android Firestore,查询数组,android,google-cloud-firestore,Android,Google Cloud Firestore,我想从上述数据库中查询突出显示的值 我的代码不完整,我不知道如何完成查询。 我想知道整个收藏中是否有123456789, 类似于普通查询。whereEqualTo(“地址”,“P18/a CIT Road Ananda Palit”)会给我第三份文件,这里我想查询卡片 CollectionReference ref = db.collection("company"); Query query = ref.whereEqualTo("card[]","???"); 要解决此问题,请使用以下代码

我想从上述数据库中查询突出显示的值

我的代码不完整,我不知道如何完成查询。 我想知道整个收藏中是否有123456789, 类似于普通查询
。whereEqualTo(“地址”,“P18/a CIT Road Ananda Palit”)
会给我第三份文件,这里我想查询
卡片

CollectionReference ref = db.collection("company");
Query query = ref.whereEqualTo("card[]","???");

要解决此问题,请使用以下代码:

ref.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        for (DocumentSnapshot document : task.getResult()) {
            List<String> list = (List<String>) document.get("card");
            for (String item : list) {
                    Log.d("TAG", item);
            }
        }
    }
});
请记住,
document.get(“card”)
不会返回
数组
,而是返回
数组列表

如果您想使用
whereEqualTo()
方法进行查询,那么我建议您稍微更改一下数据库。您的数据库结构应如下所示:

Firestore-root
   |
   --- company
         |
         --- companyDocumentId
                |
                --- address: "P18/A CIT Road Palit"
                |
                --- card
                     |
                     --- 123: true
                     |
                     --- 456: true
                     |
                     --- 789: true
Query = ref.whereEqualTo("card.123", true);
在这种情况下,您的查询应该如下所示:

Firestore-root
   |
   --- company
         |
         --- companyDocumentId
                |
                --- address: "P18/A CIT Road Palit"
                |
                --- card
                     |
                     --- 123: true
                     |
                     --- 456: true
                     |
                     --- 789: true
Query = ref.whereEqualTo("card.123", true);
编辑:

根据您的建议,查询应为:

Query = ref.whereEqualTo("card.E20040806709002620760CE82", true);
编辑2018年8月13日:

根据更新的文档,现在可以使用
whererraycontains()
方法基于数组值过滤数据。一个简单的例子是:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
此查询返回每个城市文档,其中regions字段是包含west_coast的数组。如果数组中有您查询的值的多个实例,则结果中只包含一次文档


我想查询集合中是否存在123456789。。我正在做一个收集参考,而不是文件参考。我该怎么做。是的,我正在使用
CollectionReference
。尽管CloudFireStore可以存储数组,但它不支持查询数组成员或更新单个数组元素。使用实际的数据库结构无法实现所需的功能。你可以用我的。当你在列表中循环时,看看是否存在某个特定的密钥,对吗?谢谢我知道了,非常感谢alex。我将使用您的数据库结构。:)嘿,alex
Query=ref.whereEqualTo(“123”,真)不起作用,这就是我们在对象中查询的方式吗?谢谢alex..我试过了,但有一段时间不起作用,结果我不得不修剪另一个函数返回的字符串。非常感谢你的帮助