按键查询Google数据存储区并按其他属性排序

时间:2010-06-29 20:03:55

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

我在java中使用低级数据存储区接口。我有一个存储密钥集合的实体。我想查询数据存储区以获取集合中的所有实体。但是,我还想在创建的日期属性上对它们进行排序。所以,我想做这样的事情:

Query query = new Query(EndeavorUpdate.ENDEAVOR_UPDATE_ENTITY_TYPE);
//getEndeavorUpdateIds() returns a List < Key >
query.addFilter("__key__", Query.FilterOperator.EQUAL, getEndeavorUpdateIds());
query.addSort(EndeavorUpdate.CREATED_DATE_PROPERTY);
PreparedQuery pq = ds.prepare(query);

但是,我得到一个例外,说“不允许使用一组值”。如果我使用IN而不是EQUAL,它确实有效,但这看起来非常低效。

有没有办法有效地进行此查询,还是应该从数据存储区获取所有实体并自行进行排序?

1 个答案:

答案 0 :(得分:4)

由于您拥有密钥,因此直接通过密钥获取所有实体并按照日期对其进行排序将是最有效的。

自己进行排序也可以避免在EndeavorUpdate模型的日期创建字段中需要索引(取决于您是否还需要代码中的其他位置的索引)。