如何在Firestore中获取密钥列表?

ell*_*zen 8 firebase google-cloud-firestore

我有一组带有生成标识符的文档.问题是:是否可以在不查询所有文档数据的情况下获取标识符列表?将这些密钥存储在单独的集合中更好吗?

Gil*_*ert 13

答案取决于您尝试使用的API.

对于移动/ Web SDK,由于这些客户端不支持任何类型的投影,因此无法满足您的要求.

对于服务器SDK,您可以执行空投影,即

db.collection('foo').select()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,服务器将向您发送匹配的文档,但将省略查询结果中的所有字段.

对于REST API,您可以使用runQuery包含字段掩码的等效项来执行等效操作'__name__',如下所示:

curl -vsH 'Content-Type: application/json' \
  --data '{
    "parent": "projects/my-project/databases/(default)",
    "structuredQuery":{
      "from": [{"collectionId": "my-collection"}],
      "select": {
        "fields": [{"fieldPath":"__name__"}]
      }
    }
  }' \
  'https://firestore.googleapis.com/v1beta1/projects/my-project/databases/(default)/documents:runQuery'
Run Code Online (Sandbox Code Playgroud)

替代my-projectmy-collection酌情.请注意,"collectionId""from"只有最右边的名称组件.如果要在子集合中使用密钥,则REST API需要"parent"字段中的父文档名称.

  • 您阅读的每个文档都很重要,即使您阅读的只是文档名称。 (5认同)
  • @KrisztiánVelez:您误解了那里的文档。获取文档 ID 是对文档读取的计数。 (4认同)

tom*_*ozb 10

在 node.js 运行时,您可以获得这样的文档 ID 列表

const documentReferences = await admin.firestore()
        .collection('someCollection')
        .listDocuments()

const documentIds = documentReferences.map(it => it.id)
Run Code Online (Sandbox Code Playgroud)