![](/img/trans.png)
[英]Firebase Firestore collectionGroup() query method not recognized - swift
[英]Firestore collectionGroup query returns empty result
组有成员(用户列表),我想查询并查找特定用户的所有组。 我发现 collectionGroup 查询应该是解决方案,这是我的查询代码。
let db = Firestore.firestore()
let ref = db.collectionGroup("members").whereField("id", isEqualTo: userID)
ref.getDocuments(completion: { (snapshot, error) in
guard let snapshot = snapshot else { return }
print(snapshot.documents.count) --> Always 0
})
并且还更新了安全规则(应用程序尚未公开,因此规则只是占位符)。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
match /{path=**}/members/{doc} {
allow read, write;
}
}
}
需要帮助理解为什么(并修复)查询总是返回空结果时,显然数据库有一个具有匹配用户 ID 的成员的组。
当显然数据库有一个组的成员具有匹配的用户 ID 时,查询总是返回空结果。
发生这种情况是因为member
是您文档中的一个属性,而不是一个子集合。
根据有关Firestore 中集合组查询的官方文档:
集合组由所有具有相同 ID 的集合组成。 默认情况下,查询从数据库中的单个集合中检索结果。 使用集合组查询从集合组而不是单个集合中检索文档。
因此,如果您想使用集合组查询,您需要将member
属性更改为子集合,您应该在其中添加member
对象,然后您的查询才会起作用。
在使用集合组查询之前,不要忘记创建一个支持您的集合组查询的索引。
不要将成员作为地图类型放在字段中,而是放在集合中。
然后,您将在控制台中收到一个错误,其中包含一个用于创建您想要的索引的链接,如下所示:
该查询需要集合成员和字段 ID 的 COLLECTION_GROUP_ASC 索引。 您可以在此处创建它: https : //console.firebase.google ...
在新索引生效之前给它一点时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.