繁体   English   中英

Firestore collectionGroup 查询返回空结果

[英]Firestore collectionGroup query returns empty result

我的 Firestore 数据库目前设置如下: 数据库

组有成员(用户列表),我想查询并查找特定用户的所有组。 我发现 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM