我有一个集合,其中有一个名为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"));
}
答案 0 :(得分:0)
使用此选择会遇到的问题是Firestore doesn't support logical OR queries among multiple fields。如果您想知道是否在文档上设置了N个类别的任何,则必须在客户端上分别查询每个 N个类别。那可能不是您想要的,因为您可能会为每个查询多次阅读文档。
最好将类别列表分成10个批次,使用arrayContainsAny分别查询每个批次,然后在客户端上合并每个查询的结果。