【问题标题】:Get All Documents for a Sub Collection in Firebase Cloud Firestore获取 Firebase Cloud Firestore 中子集合的所有文档
【发布时间】:2021-05-09 10:30:09
【问题描述】:

更新

对于将来也遇到类似问题的任何人。我不确定为什么带有 documentWithPath 和 documentWithCollection 的 ObjectiveC-SDK 不起作用,但我发现如果我们直接给出它可以工作的路径。

所以不要问

self.db collectionWithPath:@"stage_tickets"]documentWithPath:bookingReference]collectionWithPath:@"tickets"]getDocumentsWithCompletion

一无所获,你可以直接写路径

self.db collectionWithPath:@"stage_tickets/{bookingReference}/tickets"]getDocumentsWithCompletion


我有一个类似这样结构的 Cloud FireStore 数据库。

结构基本上是stage_tickets(Collection)->Numbers(Documents)->Tickets(Collection)->Numbers(Documents)

真正奇怪的是,如果我想从第一级获取所有数字,我可以很容易地通过

[[self.db collectionWithPath:@"stage_tickets"]
          getDocumentsWithCompletion:^(FIRQuerySnapshot *snapshot, NSError *error) {
                      if (error != nil) {
                        NSLog(@"Error getting documents: %@", error);
                      } else {
                        for (FIRDocumentSnapshot *document in snapshot.documents) {
                          NSLog(@"%@ => %@", document.documentID, document.data);
                        }
                      }
}];

但如果我尝试通过

达到第二级数字
[[[[self.db collectionWithPath:@"stage_tickets"]documentWithPath:bookingReference]collectionWithPath:@"tickets"]getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot, NSError * _Nullable error) {
                    if(error!=nil){
                        NSLog(@"error in getting QR Code");
                    }else{
                        for (FIRDocumentSnapshot *document in snapshot.documents) {
                            NSLog(@"%@ => %@", document.documentID, document.data);
                        }
                    }
}];

我得到的只是快照中的空文档。任何人都可以建议我在这里做错了什么,也许是我不知道的一些 fireStore 行为以及我该如何解决这个问题。

【问题讨论】:

  • 你想从第一阶段获取stage_tickets(Collection)->Numbers(Documents)->Tickets(Collection)>Numbers(Documents)这个文件_stage_tickets(Collection)->Numbers(Documents)或者所有Tickets (收集)文件??
  • 我基本上想从第二栏的门票集合中获取所有门票(文档/最后一栏)。

标签: ios objective-c swift firebase google-cloud-firestore


【解决方案1】:

您可以使用 CollectionGroup 获取所有工单的文档数据,如下所示

self.db.collectionGroup("tickets").getDocuments { (snapshot, error) in
        
        if let err = error
        {
            print(err)
        }
        else
        {
            if let snapshot = snapshot,snapshot.documents.count > 0
            {
                for document in snapshot.documents
                {
                    print(document.data())
                }
            }
            
        }
    }

您可以获取特定集合的所有文档,如下所示

self.db.collection("stage_tickets").document("00005055").collection("tickets").getDocuments { (snapshot, error) in
        
        if let err = error
        {
            print(err)
        }
        else
        {
            if let snapshot = snapshot,snapshot.documents.count > 0
            {
                for document in snapshot.documents
                {
                    print(document.data())
                }
            }
            
        }
    }

【讨论】:

  • 这将返回数据库中所有门票集合的所有文档。我想要的只是获取特定票证的所有文件。例如 stage_tickets/00005055/tickets/*All Documents for this specific Collection*中的所有文档*
  • 嘿@dev_ios999,我已经更新了获取特定集合的所有文档的答案。所以,请调查一下
猜你喜欢
  • 2021-07-01
  • 2021-03-27
  • 2018-04-30
  • 1970-01-01
  • 2018-04-03
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多