Firebase 收集组查询 Id/Key

Sco*_*ich 6 firebase google-cloud-firestore

我一直在关注以下文档:https : //firebase.google.com/docs/firestore/query-data/queries#collection-group-query

我的数据结构大致如下:

/teams/{teamid}
{
   displayName: "Company X Team",
   owner: "userid",
}

/teams/{teamid}/invites/{emailAddressAsKey}
{
    someProp: "my data"
}
Run Code Online (Sandbox Code Playgroud)

在我的网络应用程序中,我想搜索所有不同的团队记录,以找到一个邀请,其 ID/密钥等于我传入的电子邮件地址。阅读文档后,我认为集合组查询就是我的意思寻找。但是,我的情况与示例不完全匹配。我想匹配键,而不是文档中的道具。我想我可以再次添加电子邮件地址作为道具,但这感觉不对。

Hug*_*otl 9

您必须将文档 ID 作为密钥放在文档本身中。目前没有其他解决方案。

FieldPath.documentId()where子句中使用很诱人(例如,按照 Alex Mamo 的回答/sf/answers/3987714671/),但这在一般情况下不起作用。原因是FieldPath.documentId()实际上是指文档的完整、唯一 ID,包括其路径。

如果您尝试这样做,您将收到以下错误:

错误:查询集合组并按 FieldPath.documentId() 排序时,相应的值必须产生有效的文档路径,但“<your doc id>”不是因为它包含奇数个段。

基本上,该where子句仅适用于对键/值而不是文档 ID 的搜索。


Ale*_*amo 1

您可以借助FieldPath.documentId()以下代码行来解决此问题:

db.collectionGroup('teams').where(firebase.firestore.FieldPath.documentId(), '==', 'teams/teamId').get()
Run Code Online (Sandbox Code Playgroud)

此查询将返回具有特定团队 ID 的所有文档。

  • 此方法不起作用,因为“FieldPath.documentId()”引用整个完全限定路径。已经在下面发布了答案。 (7认同)

归档时间:

查看次数:

3348 次

最近记录:

4 年,9 月 前