【问题标题】:Google Cloud Datastore : Composite Index : Order by does not seems to work谷歌云数据存储:综合索引:排序似乎不起作用
【发布时间】:2016-11-21 11:44:21
【问题描述】:

我正在使用带有 (C#) .NET 代码的 Google Cloud 数据存储,我在数据存储中有名为 Audit 的表,其中包含以下列

ID/Name (long), ID (long), ActionType (String), GroupType (String), DateTime (TimeStamp), CompanyID (long), UserID (long), ObjectID (long), IsDeleted (boolean)

仅供参考,ID/Name 和 ID 都包含相同的信息

我想像这样运行 GQL 查询

SELECT * FROM Audit WHERE GroupType='XYZ' AND ActionType='CREATED' AND CompanyID=152738292 and IsDeleted=false 按 ID 排序

我似乎没有获得正确的复合键并不断收到“您的数据存储区没有此查询所需的复合索引(开发人员提供)”

这是使用 index.yaml 创建的复合索引。

- 种类:审计 特性: - 名称:身份证 方向:描述 - 名称:已删除 - 名称:公司 ID 方向:描述 - 名称:组类型 - 名称:动作类型

对此主题的任何帮助将不胜感激!

如果您需要更多信息,请告诉我

【问题讨论】:

    标签: c# google-app-engine google-cloud-datastore gql composite-index


    【解决方案1】:

    对于此查询,您需要一个复合索引,其中ID 是最后一个元素,其排序顺序与查询中的排序顺序相匹配。例如:

    - kind: Audit
      properties:
      - name: IsDeleted
      - name: CompanyID
        direction: desc
      - name: GroupType
      - name: ActionType
      - name: ID
    

    (ID 在此索引定义中隐式升序排序。)

    【讨论】:

    • 感谢 Ed,它成功了!我现在可以运行查询,例如 SELECT * FROM Audit WHERE CompanyID=167282 AND GroupType='XYZ' AND ActionType='CREATED' AND IsDeleted=false Order by ID desc LIMIT 5
    • @ED - 这里的秘诀是什么?我遇到了同样的问题,并且将按字段的顺序移动到索引定义的底部得到了解决..这一定是我想念的愚蠢的东西..试图理解那是什么..
    • 这里有一些信息:cloud.google.com/datastore/docs/concepts/…。或者您可以使用gcloud 来帮助您确定需要哪些索引(cloud.google.com/datastore/docs/tools)。如果您进行的查询需要您没有的索引,则错误消息还应该为您推荐一个索引。
    猜你喜欢
    • 2018-01-18
    • 2013-05-17
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2015-07-17
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多