假设我有一个名为EntityA的实体类型,我有一个EntityA ID列表。如何查询我的数据库中的所有EntityA实体,其中id不在我所拥有的EntityA ID列表中?
我尝试做类似的事情:
ofy().load().type(EntityA.class).filter("!IN", entityAKeys);
我怎么能让它运作?有可能吗?
答案 0 :(得分:0)
不,这不受支持,因为Cloud Datastore仅允许索引支持的查询确保它们不会因为您的数据集扩展而中断。
您必须查询EntityA中的所有实体,并自行过滤掉客户端的entityAKeys中的实体。
答案 1 :(得分:0)
所以我最终做了:
List<Key<MXChallenge>> keyList = new ArrayList<>();
List<Key<MXChallenge>> searchInKeys = ofy().load().type(MXChallenge.class).keys().list();
for(Long id : alreadyRetrieved){
keyList.add(Key.create(MXChallenge.class, id));
}
searchInKeys.removeAll(keyList);
QueryResultIterator<MXChallenge> iteratorChallenges = ofy().load()
.type(MXChallenge.class).filter("colour", "blue").filterKey("IN", searchInKeys).iterator();
我在性能方面也不确定,但由于它是“仅限按键”的操作,我认为应该没问题。