通过 collectionGroup 按名称查询

Query via collectionGroup by name

自 2019 年 5 月 8 日起,Firebase Firestore 现在支持通过 collectionGroup('collectionName').

查询同名的子集合

有没有办法在这些子集合中检索相同 docId 的多个文档?

这是我正在努力完成的一个小视觉示例。

collectionA
  - documentA
    : collectionB
      - documentC
  - documentB
    : collectionB
      - documentC

假设我想获得这两个 documentC 文件。有办法吗?

我正在尝试使用的当前代码是这样的:

const docIdFieldPath = FieldPath.documentId()
admin.firestore().collectionGroup('collectionB').where(docIdFieldPath, '==', 'documentC').get().then(...)

但是我抛出了一个错误:

INVALID_ARGUMENT: Resource name "projects/myProject/databases/(default)/documents/documentB" lacks "/" at index 86.

关于此事的文档说在尝试通过 collectionGroup 查询之前创建一个索引,但是如果我尝试通过在线索引门户这样做,我会收到一条错误消息,指出 __name__ 字段已保留。

我是不是遗漏了一些愚蠢的东西,还是这个功能还不被支持?

一些 Firestore 团队告诉我这不受支持。您不能根据文档 ID 的字符串进行过滤。移动 SDK 给你一个更好的消息,但显然 nodejs SDK 没有。

您可以做的是将文档的 ID 作为字段存储在文档本身中,然后在该字段上进行过滤。