代码之家  ›  专栏  ›  技术社区  ›  Chaudhry Talha

收听添加到firestore中集合的任何新文档

  •  0
  • Chaudhry Talha  · 技术社区  · 5 年前

    现有的解决方案对我不管用,我试过了。我要做的是在存储在Firestore上的线程中获取消息。以下是聊天集合的当前结构:

    enter image description here

    正如你所看到的,用户1和用户2之间的聊天只有2条消息,我正在尝试获取这些消息,并且如果它们被添加到线程中,也会监听它们。下面是我如何做的代码:

    func loadChat() {
    
        self.showWaitOverlayWithText("Loading")
        let db = Firestore.firestore().collection("Chats")
            .whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
            .whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")
    
        db.getDocuments { (querySnap, error) in
            if let error = error {
                print("Error: \(error)")
                return
            } else {
                let doc = querySnap?.documents.first
    
               doc?.reference.collection("thread").addSnapshotListener(includeMetadataChanges: true, listener: { (threadQuery, error) in
                    //Never comes here
                    for message in threadQuery!.documents {
                        self.removeAllOverlays()
                        print("Data: \(message.data())")
                    }
                })
            }
        }
    }
    

    collection("thread").addSnapshotListner .

    0 回复  |  直到 5 年前
        1
  •  0
  •   David Chopin    5 年前

    所以,问题只是查询中的一个错误键“user2UID”而不是“user2ID”。我们可以通过检查可选值是否( doc querySnap )不管是否为零。 等于零, 查询捕捉 不是,但它的文档计数等于零。这让我们知道问题出在线路上

    let db = Firestore.firestore().collection("Chats")
           .whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid ?? "Not Found User 1")
           .whereField("user2UID", isEqualTo: user2UID ?? "Not Found User 2")