【问题标题】:GQL query where field is not null字段不为空的 GQL 查询
【发布时间】:2015-04-18 14:58:18
【问题描述】:

我有一个名为 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 上工作)。

【问题讨论】:

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


    【解决方案1】:

    https://console.cloud.google.com/datastore/entities/query/gql 上经过反复试验

    我发现这个解决了 IS NOT NULL 的表达式:

    > NULL
    

    例子:

    Select * from State where customer_id > NULL

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

    【讨论】:

    • 惊讶的是,GQL 不支持 IS NOT NULL。
    【解决方案2】:

    这应该很简单

    Filter selfie = new FilterPredicate("selfie", FilterOperator.NOT_EQUAL, null);
    

    您实际传递 Java 空值(不是字符串)并使用不等于过滤器的位置(请参阅 https://stackoverflow.com/a/22200137)。

    就我个人而言,我一直在使用 JDO 来管理我的数据存储区,这有利有弊。如果您也想查看使用 JDO 的解决方案,请告诉我。干杯!

    【讨论】:

    • @Kevin Thomas 你能告诉我们如何对 JDO 做同样的事情吗?谢谢。
    • 原发帖人要求提供 GQL 解决方案。这也是我正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多