通过祖先云数据存储区顺序

时间:2018-01-31 17:29:37

标签: node.js google-cloud-platform google-cloud-datastore

语言:NodeJS

在查询Google云端数据时是否可以同时使用订单 ancestorKey

类似的东西:

const ancestorKey = datastore.key({namespace: 'MyNameSpace', 
                                   path: ['MyParentEntity', 'parent_entity_id']});

const query = datastore.createQuery('MyNameSpace', 'my_child_entity')
                        .order('someProperty', {descending: true})
                        .hasAncestor(ancestorKey);

注意:以上操作不起作用

1 个答案:

答案 0 :(得分:1)

TL; DR:是的,这是可能的。

至少通过API,这种查询是可能的。

示例:

  1. 首先我们创建祖先实体(保留响应中的密钥ID)。 [API call]
  2. 然后我们创建了几个子实体。 API调用:[1] [2]
  3. 对于Datastore queries,您需要为要查询的每个属性或属性组合建立索引。 Datastore provides built-in single-property indexes by default,但您的查询是复合的(祖先+ order_property),因此您必须构建自己的索引。为此,首先编写index.yaml文件(我正在创建两个索引,一个用于升序排序,另一个用于降序):

    indexes:
    - kind: child
      ancestor: yes
      properties:
        - name: order
          direction: desc
    
    - kind: child
      ancestor: yes
      properties:
        - name: order
          direction: asc
    
  4. 使用gcloud datastore create-indexes index.yaml

  5. 部署索引
  6. 等待索引完成构建,然后您可以执行查询。 API调用:[ascending] [descending]

  7. 您可以在cloud shell

    中测试此示例

    知道API正常运行,您只需在idiomatic library中实现此功能。确保正确定义了实体,并创建了索引。如果您有疑问,只需尝试通过API查询它是否应该在节点内工作。