GQL查询字段不为空

时间:2015-02-17 19:27:47

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

我有一种名为Account的实体。其中一个字段是名为selfie的字符串,它基本上是用户上传的自拍照的网址。我想获取拥有自拍照的用户(因此,如果用户没有自拍,则不应将其包含在结果集中)。我有以下查询。但它不起作用,因为我有"NULL"作为字符串。这样做的正确方法是什么?同样,我只想要有自拍的用户。

Filter selfie = new FilterPredicate("selfie", FilterOperator.GREATER_THAN, "NULL");
Query query = new Query(Account.class.getSimpleName()).setFilter(selfie);
FetchOptions options = FetchOptions.Builder.withLimit(30);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
QueryResultList<Entity> entities = datastore.prepare(query).asQueryResultList(options);

此外,我对在App-Engine上执行此操作的JDO / JPA方式持开放态度(但它必须适用于App-Engine)。

2 个答案:

答案 0 :(得分:2)

这应该像

一样简单
Filter selfie = new FilterPredicate("selfie", FilterOperator.NOT_EQUAL, null);

你实际传递Java null值(不是String)并且过滤时不等于(参见https://stackoverflow.com/a/22200137)。

就个人而言,我一直在使用JDO进行数据存储管理,这有其优点和缺点。如果你想看到使用JDO的解决方案,请告诉我。干杯!

答案 1 :(得分:1)

https://console.cloud.google.com/datastore/entities/query/gql

上进行了一些试验和错误

我发现这个工作围绕IS NOT NULL的表达式:

> NULL

示例:

  

从州中选择*,其中customer_id&gt; NULL

我还没有在负值的字段上对此进行测试。