Firestore中使用SnapshotListener的逻辑OR语句导致合并问题

时间:2019-03-26 20:54:32

标签: ios swift firebase google-cloud-firestore

我正在使用以下代码从Firebase检索两个文档列表,并将它们合并到一个集合中,作为Firebase文档在处理逻辑OR语句时所建议的表视图源。

let db = Firestore.firestore()
    var sessions = [Session]()

    db.collection("sessions")
        .whereField("createdByUser.id", isEqualTo: userUID)
        .whereField("startTime", isGreaterThan: Timestamp(date: Date()))
        .whereField("status", isEqualTo: SessionStatus.Approved.rawValue)
        .order(by: "startTime", descending: true)
        .addSnapshotListener({ (querySnapshot, error) in

            guard let documents = querySnapshot?.documents else {
                print("Error fetching documents: \(error!)")
                return
            }

            var cSessions = [Session]()
            for document in documents {

                if var session = Session(data: document.data()) {
                    session.id = document.documentID
                    cSessions.append(session)
                }
            }

            db.collection("sessions")
                .whereField("joinedByUser.id", isEqualTo: userUID)
                .whereField("startTime", isGreaterThan: Timestamp(date: Date()))
                .whereField("status", isEqualTo: SessionStatus.Approved.rawValue)
                .order(by: "startTime", descending: true)
                .addSnapshotListener({ (querySnapshot, error) in

                    guard let documents = querySnapshot?.documents else {
                        print("Error fetching documents: \(error!)")
                        return
                    }

                    var jSessions = [Session]()
                    for document in documents {

                        if var session = Session(data: document.data()) {
                            session.id = document.documentID
                            jSessions.append(session)
                        }
                    }
                    sessions.append(contentsOf: cSessions)
                    sessions.append(contentsOf: jSessions)

                    completion(sessions)
                })

        })

但是,当我向每个查询添加Snapshotlistener时,每个查询的结果集的行为都异常。侦听器将单独触发每个侦听器,从而导致合并的集合包含重复项。 我尝试了各种设置的组合,每个设置都有其自己的问题,这使我相信我的查询或数据模型都存在一些重大缺陷。

文档并没有真正显示如何处理子查询上的侦听器,因此在重新构建整个数据模型之前,我基本上处于机智。

0 个答案:

没有答案