云数据存储按祖先排序

Cloud datastore order by with ancestor

语言:NodeJS

查询google云数据时,是否可以同时使用orderancestorKey

与此类似的内容:

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);

注意:以上方法无效

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

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

示例:

  1. 首先我们创建祖先实体(保留响应中的密钥 ID)。 [API call]
  2. 然后我们创建几个子实体。 API 调用:[1] [2]
  3. 对于 Datastore queries you'll need an index for each property or combination of properties that you want to query. Datastore provides built-in single-property indexes by default,但是您的查询是复合的 (ancestor+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]

您可以在 cloud shell.

中测试这个例子

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