字段不为空的 GQL 查询

Kat*_*lon 5 java google-app-engine gql google-cloud-datastore

我有一个名为 Account 的实体类型。其中一个字段是名为 的字符串selfie,它基本上是用户上传的自拍照的 URL。我想为有自拍的用户获取(因此,如果用户没有自拍,则不应将其包含在结果集中)。我有以下查询。但它不起作用,因为我有"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);
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*311 5

经过在https://console.cloud.google.com/datastore/entities/query/gql上的一些试验和错误

我发现这项工作解决了 IS NOT NULL 的表达式:

> NULL
Run Code Online (Sandbox Code Playgroud)

例子:

Select * from State where customer_id > NULL

我还没有在负值的字段上测试过这个。

  • 很惊讶 GQL 不支持 IS NOT NULL。 (5认同)

Mr.*_*mas 1

这应该很简单

Filter selfie = new FilterPredicate("selfie", FilterOperator.NOT_EQUAL, null);
Run Code Online (Sandbox Code Playgroud)

您实际上传递 Java null 值(不是字符串)并使用不等于进行过滤(请参阅/sf/answers/1554009621/)。

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