IN 对面的对象化查询

Objectify Query Opposite of IN

假设我有一个名为 EntityA 的实体种类,并且我有一个 EntityA id 列表。我如何从我的数据库中查询所有 EntityA 实体,而这些实体的 ID 不在我拥有的 EntityA ID 列表中?

我正在尝试做类似的事情:

ofy().load().type(EntityA.class).filter("!IN", entityAKeys);

我怎样才能让它工作?可能吗?

不,这不受支持,因为 Cloud Datastore 仅允许索引支持的查询以确保它们不会随着数据集扩展而中断。

您将不得不查询 kind EntityA 中的所有实体,并自行在客户端过滤掉 entityAKeys 中的实体。

所以我最后做了这样的事:

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();

虽然我不确定性能如何,但由于它是一个 "keys-only" 操作,所以我认为它应该没问题。