有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于java标记的过滤实现Firestore

我有一个集合,其中有一个名为categories的字段。它包含对象["cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8", "cat9", "cat10",cat11]的数组。(阵列中有10多个类别)

当尝试执行whereArrayContainsAny时,它会给出一个错误INVALID_ARGUMENT: A maximum of 10 'IN' or 'ARRAY_CONTAINS_ANY' filter values are allowed at once.,因此我无法将此数组视为此数组。然后我读了一些文章,他们说要维护数据地图,比如

catagories
  |_cat1 : true
  |_cat2 : false
  |_cat3 : false

如果使用此方法,是否存在任何性能问题?当类别超过10个时,是否有方法使用相同的现有数组方法进行过滤

我试过的是

Firestore db = FIRConnection.initFIRConnection();

// Create a reference to the cities collection
CollectionReference deliveries = db.collection("data");

// Create a query against the collection.
Query query = deliveries.whereArrayContainsAny("categories", Arrays.asList("cat1",
                "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8", "cat9", "cat10", "cat11"));

// retrieve  query results asynchronously using query.get()
ApiFuture<QuerySnapshot> querySnapshot = query.get();

for (DocumentSnapshot document : querySnapshot.get().getDocuments()) {
    System.out.println(document.get("categories"));
}

共 (1) 个答案

  1. # 1 楼答案

    这个选择会遇到的问题是Firestore doesn't support logical OR queries among multiple fields。如果您想知道文档上是否设置了N个类别中的任何一个,您必须在客户端上分别查询N个类别中的每个类别。这可能不是您想要的,因为对于每个查询,您可能会多次阅读文档

    您可能会更幸运地将类别列表分成10个批次,使用arrayContainsAny分别查询每个批次,然后在客户端上合并这些查询的结果