我一直关注以下文档: 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 /密钥等于我传递的电子邮件地址的邀请。在阅读了文档之后,我认为集合组查询是什么我在找。但是,我的情况与示例不完全匹配。我想匹配键,而不是文档中的道具。我想我可以再次添加电子邮件地址作为道具,但这感觉不对。
答案 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。