我在Google Cloud Firestore中的查询条件有问题。
下面是我的代码,以获得第一个以HA_开头的文档并按ID DESC排序
public Article getLastArticleProvider() { ApiFuture<QuerySnapshot> query = firebaseDB.getTblArticles() .whereGreaterThanOrEqualTo("articleId", "HA_") .orderBy("id", Query.Direction.DESCENDING) .limit(1) .get(); QuerySnapshot snapshotApiFuture; Article article = null; try { snapshotApiFuture = query.get(); List<QueryDocumentSnapshot> documents = snapshotApiFuture.getDocuments(); for (QueryDocumentSnapshot document : documents) { article = document.toObject(Article.class); } } catch (InterruptedException | ExecutionException e) { return null; } return article; }
我想获取文章ID为“ HA_”或“ XE_”开头的文章的最后ID
例如上图:
java.util.concurrent.ExecutionException: com.google.api.gax.rpc.InvalidArgumentException: io.grpc.StatusRuntimeException:INVALID_ARGUMENT:不等式过滤器属性 和第一排序顺序必须相同:articleId和id
如以下错误所述:
不等式过滤器属性和第一排序顺序必须相同:articleId 和id
因此 ,在您的案例articleId和中,您无法使用不同的属性对元素进行过滤并同时对其进行排序id。
官方 文档中还有一个示例,说明如何不这样做:
范围过滤器和一阶按不同字段
citiesRef.whereGreaterThan("population", 100000).orderBy("country"); //Invalid
因此,要解决此问题,您应该对同一文档属性进行过滤和排序。