代码之家  ›  专栏  ›  技术社区  ›  Paradox

firebase查询或'ing whereequalto以获取可能值的列表

  •  1
  • Paradox  · 技术社区  · 7 年前

    我见过 this question before for an earlier version of Firebase 这不再适用于firebase cloud firestore。

    我想做一个查询,用一个潜在值列表来检查文档字段的值,比如 whereEqualTo(someField, a OR b OR c OR ... OR n) .具体来说,我有一个引用类型的单个字段的潜在值列表,我希望查询返回指定集合中字段值等于列表中潜在值之一的所有文档。我也在用 .limit(10) 因为我正在分页数据。

    因此,例如,如果我的列表包含引用[ref1,ref2,ref3],则查询将类似于连接这3个查询:

    query query1=mdatabase.collection(“mycollection”).whereequalto(“reffield”,ref1);
    query query2=mdatabase.collection(“mycollection”).whereequalto(“reffield”,ref2);
    query query3=mdatabase.collection(“mycollection”).whereequalto(“reffield”,ref3);

    documentation 在“限制”一节中,它提到:

    Logical OR queries. In this case, you should create a separate query for each OR condition and merge the query results in your app.

    因此,最好的方法可能是合并查询结果,但如何才能做到这一点,并限制为10个结果?

    请注意,我正在使用java进行android开发。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Alex Mamo    7 年前

    我想做一个查询,根据一个潜在值列表检查文档字段的值。

    不幸的是,firestore中没有可以帮助您实现这一点的查询。你能做的是把所有的文件 myCollection 收集所需文档字段的值,并将其与以下潜在值列表进行比较:

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    CollectionReference myCollectionRef = rootRef.collection("myCollection");
    myCollectionRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                List<String> yourList = new ArrayList<>();
                for (QueryDocumentSnapshot document : task.getResult()) {
                    DocumentReference reference = document.getDocumentReference("refField");
                    String stringReference = reference.getPath();
                    if (yourList.contains(stringReference)) {
                        Log.d(TAG, "Reference found!");
                    }
                }
            }
        }
    });
    

    我假设您的列表包含字符串类型的文档引用。如您所见,我们需要序列化 DocumentReference 通过使用 getPath() 方法获取描述文档在数据库中位置的字符串。将该路径字符串反序列化回 文件参考 对象,使用 FirebaseFirestore.getInstance().document(path) 方法。

    如果你对分页感兴趣, this 是如何通过将查询游标与limit()方法组合来对查询分页的。我也建议你看看这个 video 为了更好的理解。