使用Cloud Firestore在Firebase数据库中的集合内的文档内部迭代集合

时间:2020-04-30 07:11:28

标签: swift firebase google-cloud-firestore

我正在开发一个类似Instagram的应用程序,该应用程序具有帖子和多个用户。 Cloud Firestore的结构采用以下方式

收藏:“用户”->文档:“用户名”->收藏:“帖子”->文档:“个人帖子”

如您所见,我对其进行了设置,以使Users集合包含一堆文档,每个文档代表使用该应用程序的所有用户的用户名。每个用户名文档都有自己的名为“帖子”的集合,其中包含他们所发表的每个帖子,并且每个帖子都是该集合中的文档。

我的问题是,如何为数据库中的每个用户访问此Post集合?

现在,我正在尝试遍历Users集合中的每个用户名文档,访问其Posts集合,并在此集合上调用一个已经起作用的函数,该函数可以创建帖子并将其添加到feed中。我的麻烦是无法访问嵌套在Cloud Firestore中的Posts集合。

func allUsers() {
        let users = db.collection("Users")
        users.getDocuments { (snapshot, error) in
            if error != nil {
                debugPrint("Error getting the users from firebase.")
            } else {
                for document in (snapshot?.documents)! {
                    self.getPost(document: document)
                }
            }
        }
    }

这就是我尝试遍历每个用户名的方式。对于User集合中的每个用户名,我都调用了getPost函数。

func getPost(document : QueryDocumentSnapshot) {
        let theData = document.data()
        let theDocument = theData["Posts"] as? CollectionReference
        theDocument!.getDocuments { (snapshot, error) in
            if error != nil {
                debugPrint("Error getting the data from firebase.")
            } else {
                for document in (snapshot?.documents)! {
                    let _data = document.data()
                    let _image = _data["image"] as? String ?? "Anonymous"
                    let _username = _data["username"] as? String ?? "Anonymous"
                    let _location = _data["location"] as? String ?? "Anonymous"
                    let _description = _data["description"] as? String ?? "Anonymous"
                    let _quantity = _data["quantity"] as? String ?? "Anonymous"
                    let _phone = _data["phone"] as? String ?? "Anonymous"
                    let _date = _data["date"] as? Date ?? Date()
                    // Points to the storage
                    let _storageRef = storage.reference()
                    // Points to the images folder
                    let _folderRef = _storageRef.child("images")
                    // Points to the the image under the images folder
                    let _fileRef = _folderRef.child("\(_image).jpg")
                    //get the associated post image
                    _fileRef.getData(maxSize: 10 * 1024 * 1024) { (data, error) in
                        // Create a UIImage, add it to the array
                        if let error = error {
                            print(error)
                        } else {
                            let loadedImage = UIImage(data: data!)
                            self.addToPrevious(thePost: Post(image: loadedImage, username: _username, location: _location, description: _description, quantity: _quantity, phone: _phone, date: _date))
                            self.posts.append(Post(image: loadedImage, username: _username, location: _location, description: _description, quantity: _quantity, phone: _phone, date: _date))
                        }
                    }
                }
            }
        }
    }

我运行了调试器,并在allUsers函数中,在Users集合下看不到任何文档(即用户名)。但是,Users集合下肯定有用户名文档,因此我不确定为什么看不到它们

我的主要问题是:如何遍历Posts子集合?我需要执行此操作的原因是因为该应用程序为每个用户提供了一个主要供稿,并且该主要供稿应显示该应用程序上每个其他用户的帖子。我需要访问其他所有用户的帖子才能完成此任务。

0 个答案:

没有答案