ID /密钥上的Firebase集合组查询

时间:2019-07-10 05:13:46

标签: 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"
}

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

2 个答案:

答案 0 :(得分:1)

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

db.collectionGroup('teams').where(firebase.firestore.FieldPath.documentId(), '==', 'teamId').get()

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

答案 1 :(得分:0)

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

FieldPath.documentId()子句中使用where很诱人(例如,遵循Alex Mamo的回答https://stackoverflow.com/a/56967352/2518722),但这在一般情况下不起作用。原因是FieldPath.documentId()实际上是指文档的完整唯一ID,包括其路径。

如果您尝试这样做,将会出现以下错误:

  

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

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