【问题标题】:Google Cloud Datastore:按属性列表查询
【发布时间】:2021-02-21 05:41:48
【问题描述】:

我正在寻找如何通过属性列表在数据存储中查询的方法。

所以,我有一个简单的实体:

@Data
@Entity(name = APPLICATION_KIND)
public class ApplicationEntity {

    @Id
    private String Id;

    private String appId;

    private String name;

    private String status;
}

我想通过appIds 的列表进行查找。但是,Datastore 似乎不提供这种可能性。

DatastoreTemplate 仅提供一种可能性 - findAllById,但它既不适用于其他字段,也不适用于其他过滤器(例如,按状态)。

不幸的是,StructuredQuery.PropertyFilter 也不提供这种可能性。 StructuredQuery.CompositeFilter 只有and,但既没有or 也没有in

可能有人面临同样的问题并以某种方式解决它?

【问题讨论】:

  • Afaik IN 运算符在 Datastore 中不受支持,您要么必须执行单独的查询并合并结果,要么使用已经在后台执行此操作的库。

标签: spring-boot google-cloud-datastore spring-cloud-gcp


【解决方案1】:

数据存储区实际上支持 IN 运算符,但 OR 不支持。更多信息请参考this documentation

你实际上可以这样做:

SELECT * FROM APPS WHERE appId IN (abc, xyz, ...)

【讨论】:

  • 这是应用引擎
【解决方案2】:

您可以将StructuredQuery.PropertyFilter 中的每个属性列表作为数组传递;你可以点击这个链接:https://cloud.google.com/datastore/docs/concepts/queries#array_values

而且,对于ORIN,您可以编写一个 GQL 查询并像这样执行查询:

SELECT * FROM analysis WHERE concepts CONTAINS concept;

这里,分析实体包含一个概念列表。

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2018-12-29
    • 2017-01-16
    • 2016-06-21
    相关资源
    最近更新 更多