Android Firestore,查询数组

4

enter image description here我想从上面的数据库中查询突出显示的值

我的代码不完整,我无法弄清如何完成查询。 我想知道是否在整个集合中任何地方存在123、456、789, 就像普通查询.whereEqualTo("address","P18/A CIT Road Ananda Palit");会给我第三个文档一样,在这里我想查询card

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

6
为解决此问题,请使用以下代码:
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);
            }
        }
    }
});

输出结果为:
123
456
789
//and so on

记住,document.get("card") 并不会返回一个 array,它返回的是一个 ArraList

如果你想使用 whereEqualTo() 方法进行查询,那我建议你稍微改一下你的数据库结构。你的数据库结构应该像这样:

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日:

根据有关数组成员资格的更新文档,现在可以使用whereArrayContains()方法基于数组值过滤数据。一个简单的例子如下:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");

这个查询会返回所有的城市文档,其中区域字段是包含西海岸的数组。如果该数组有多个与你查询值相同的实例,则该文档仅包含在结果中一次。

我想查询集合中是否存在123,456,789,而不是文档引用。我该怎么做? - Pemba Tamang
是的,我正在使用CollectionReference。虽然Cloud Firestore可以存储数组,但它不支持查询数组成员或更新单个数组元素。您无法使用实际的数据库结构实现所需的功能。您可以改用我的数据库结构。当您遍历列表时,看看特定的键是否存在,对吧? - Alex Mamo
谢谢,我明白了。非常感谢你,Alex。我会使用你的数据库结构。 :) - Pemba Tamang
嘿,Alex,“Query = ref.whereEqualTo(“123”,true);”没有起作用,这就是我们在对象内查询的方式吗? - Pemba Tamang
谢谢Alex。我尝试了那个方法,一开始没起作用,后来发现我需要修剪另一个函数返回的字符串。非常感谢你的帮助。 - Pemba Tamang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接