通过REST进行云Firestore子集合查询

通过REST进行云Firestore子集合查询,rest,google-cloud-firestore,Rest,Google Cloud Firestore,我有收藏x,每个x的文档都有子收藏y。y的每个文档都有一个time属性。我不知道如何通过REST查询该子集合(我知道SDK中存在此功能)。到目前为止,我的问题显然是错误的: { "structuredQuery": { "from": [ { "collectionId": "x", "allDescendants": true } ], "where": { "compositeFilter": {

我有收藏
x
,每个
x
的文档都有子收藏
y
y
的每个文档都有一个
time
属性。我不知道如何通过REST查询该子集合(我知道SDK中存在此功能)。到目前为止,我的问题显然是错误的:

{
  "structuredQuery": {
    "from": [
      {
        "collectionId": "x",
        "allDescendants": true
      }
    ],
    "where": {
      "compositeFilter": {
        "op": "AND",
        "filters": [
          {
            "fieldFilter": {
              "field": {
                "fieldPath": "y.time"
              },
              "op": "GREATER_THAN_OR_EQUAL",
              "value": {
                "integerValue": 1577836800000
              }
            }
          },
          {
            "fieldFilter": {
              "field": {
                "fieldPath": "y.time"
              },
              "op": "LESS_THAN_OR_EQUAL",
              "value": {
                "integerValue": 1578355200000
              }
            }
          }
        ]
      }
    }
  }
}
将帖子发送到
https://firestore.googleapis.com/v1/projects/PROJECT/databases/{default}/documents:runQuery
,但我也尝试了
../documents/x/ID/y:runQuery
,但这显然也是错误的。

我相信您描述了一个集合组
y
。在RESTAPI中,这是路径
projects/PROJECT/databases/(default)/documents
(称为根文档)上的
allsubstands
查询:


我会直接联系Firebase支持部门,他们会将问题转交给工程人员。如果你从他们那里得到了答案,那么你可以把它贴回这里,供大家使用。我就是这么做的,Firebase支持人员告诉我这样发布。这是一个多么美好的世界。我坚持认为,没有任何文档或示例可以解释如何做到这一点,而且如果没有文档或示例,社区也无法了解如何做到这一点。我还建议,如果Firebase支持部门表示无法使用REST API查询子集合,这实际上是一个功能请求,以匹配客户端SDK提供的功能。
https://firestore.googleapis.com/v1/projects/PROJECT/databases/(default)/documents:runQuery

{
  "structuredQuery": {
    "from": [
      {
        "collectionId": "y",
        "allDescendants": true
      }
    ],
    "where": {
      "compositeFilter": {
        "op": "AND",
        "filters": [
          {
            "fieldFilter": {
              "field": {
                "fieldPath": "time"
              },
              "op": "GREATER_THAN_OR_EQUAL",
              "value": {
                "integerValue": 1577836800000
              }
            }
          },
          {
            "fieldFilter": {
              "field": {
                "fieldPath": "time"
              },
              "op": "LESS_THAN_OR_EQUAL",
              "value": {
                "integerValue": 1578355200000
              }
            }
          }
        ]
      }
    }
  }
}