【问题标题】:Android Firestore, Query ArrayAndroid Firestore,查询数组
【发布时间】:2018-04-04 17:33:48
【问题描述】:

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

我的代码不完整,我不知道如何完成查询。 我想知道整个集合中是否存在 123,456,789, 比如普通查询.whereEqualTo("address","P18/A CIT Road Ananda Palit");会给我第三个文档,这里我要查询card

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

【问题讨论】:

    标签: android google-cloud-firestore


    【解决方案1】:

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

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

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

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

    此查询返回每个城市文档,其中区域字段是包含 west_coast 的数组。如果数组有多个您查询的值的实例,则该文档仅包含在结果中一次。

    【讨论】:

    • 我想查询 123,456,789 是否存在于集合中的任何位置。我正在制作集合引用而不是文档引用。我该怎么做。
    • 是的,我正在使用CollectionReference。虽然 Cloud Firestore 可以存储数组,但它不支持查询数组成员或更新单个数组元素。您无法使用实际的数据库结构来实现您想要的。你可以用我的。当你遍历列表时,看看是否存在特定的键,对吗?
    • 谢谢,我明白了,非常感谢亚历克斯。我将使用您的数据库结构。 :)
    • Hey alex Query = ref.whereEqualTo("123", true); 不起作用,这就是我们在对象中查询的方式吗??
    • 谢谢亚历克斯..我试过了,它有一段时间没用,结果我不得不修剪另一个函数返回的字符串。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多