google-cloud-datastore - GAE 数据存储复合过滤器不起作用
问题描述
我正在构建一个复合过滤器,当我为此查询设置排序顺序时,它有 OR 和 AND 过滤器运算符,它没有给出正确的结果。
我尝试执行的查询是 { status == Initiated OR (Status == Failed AND failedCount <= 5) }。它实际上执行查询没有任何错误,但结果并不完全正确。它只检索“status == failed AND failedCount <= 5”而不是 status == 启动。我需要的顺序是“createdAt”字段。
Filter initiatedFilter = new FilterPredicate("status", FilterOperator.EQUAL, "Initiated");
Filter failedFilter = new FilterPredicate("status", FilterOperator.EQUAL, "Failed");
Filter failedCountFilter = new FilterPredicate("failedCount", FilterOperator.LESS_THAN_OR_EQUAL, 5);
CompositeFilter failedCompositeFilter = CompositeFilterOperator.and(failedFilter, failedCountFilter);
CompositeFilter initaiedFailedFilter = CompositeFilterOperator.or(initiatedFilter, failedCompositeFilter);
Query query2 = new Query("JobInstance").setFilter(initaiedFailedFilter).addSort("failedCount", SortDirection.ASCENDING).addSort("createdAt", SortDirection.ASCENDING);
jobEntitesList = datastoreService.prepare(query2).asList(FetchOptions.Builder.withLimit(limit));
for (Entity jobEntity2 : jobEntitesList) {
/* doing some task */
}
我观察到的是,如果删除 addSort() 它工作正常。但对我来说排序很重要。我希望结果应该是“createdAt”顺序。如果我删除 failedCount 那么它会引发一些错误。
解决方案
推荐阅读
- django - 试图让 log_error 装饰器在 Django 中工作,但得到元组错误
- python - 使用 Open CV 从线条中提取消失点
- php - 如何创建包含名称和 id laravel 的 Url
- r - 在一行中查找值,在另一列中查找最少的响应。然后绘制选定的每个时间段的平均增长
- php - strtotime 将错误结果返回给数组中的字符串
- java - 如何通过属性配置 java.util.logging 以使用标准输出?
- r - 如何在我的代码中使用 ar() 函数的输出
- mysql - Laravel:仅向订阅者加载具有隐私的帖子
- android - Android layer-list 影响浮动操作按钮的位置
- if-statement - 自动化阵列公式