通过collectionGroup按名称查询

时间:2019-05-16 01:35:44

标签: node.js google-cloud-firestore firebase-admin

因此,自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进行查询之前先创建索引,但是如果我尝试通过online-index-portal这样做,则会收到一条错误消息,提示__name__字段保留。

我是不是很傻呢,还是尚不支持此功能?

1 个答案:

答案 0 :(得分:1)

一些Firestore团队告诉我,不支持此功能。您无法根据文档ID的字符串进行过滤。移动SDK会给您带来更好的信息,但显然nodejs SDK不会。

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