如何使用app-engine数据存储查询的复合过滤器?

时间:2012-06-27 08:40:05

标签: google-app-engine google-cloud-datastore

我有这个功能:

@Override
  public List<Expense> getExpensesBetween(Date firstDate, Date secondDate) {

    Query query = new Query(expenseEntityKind);

    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, secondDate);

    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, firstDate);

    Iterable<Entity> entities = service.prepare(query).asIterable();

    return getReturnedExpenses(entities);
  }

我想要返还两个日期之间的所有费用,即大于或等于2012-05-01且小于或等于2012-06-01。我看了一眼谷歌应用引擎的documentations。它说我们必须使用复合滤波器。 Google文档:“但是,如果您要在查询中设置多个过滤器,则必须使用CompositeFilter。您必须至少有两个过滤器才能使用CompositeFilter。但是,此文档似乎是旧的,我没有找到任何名为setFilter();的函数。任何建议如何创建复合过滤器?我使用App-engine sdk 1.6.6。提前感谢。

2 个答案:

答案 0 :(得分:1)

以下摘自https://cloud.google.com/appengine/docs/java/datastore/queries,可能会对此有所帮助

Filter heightMinFilter =
  new FilterPredicate("height",
                      FilterOperator.GREATER_THAN_OR_EQUAL,
                      minHeight);

Filter heightMaxFilter =
  new FilterPredicate("height",
                      FilterOperator.LESS_THAN_OR_EQUAL,
                      maxHeight);

//Use CompositeFilter to combine multiple filters
Filter heightRangeFilter =
  CompositeFilterOperator.and(heightMinFilter, heightMaxFilter);

答案 1 :(得分:0)

您正在寻找的文档适用于最新版本(1.7.0)。这些功能刚刚推出。 Here一个如何使用CompositeFilter的例子(也是1.7.0)。