我正在使用以下代码从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时,每个查询的结果集的行为都异常。侦听器将单独触发每个侦听器,从而导致合并的集合包含重复项。 我尝试了各种设置的组合,每个设置都有其自己的问题,这使我相信我的查询或数据模型都存在一些重大缺陷。
文档并没有真正显示如何处理子查询上的侦听器,因此在重新构建整个数据模型之前,我基本上处于机智。