筛选唯一值以在邮件收件箱中显示唯一用户名



我想过滤接收器ID,以便我只会得到唯一的接收器ID。下面是我的代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! InboxCollectionViewCell
cell.inboxMessage.text = chats[indexPath.row].receiverID
return cell
}

func loadPosts() {
let senderIDNumber = Auth.auth().currentUser?.uid
let chatsRef = db.collection("chats")
chatsRef.whereField("senderID", isEqualTo: senderIDNumber!)
.addSnapshotListener { querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("Error fetching documents: (error!)")
return
}
for document in documents {
let messageText = document.data()["message"] as? String
let senderIDNumber = document.data()["senderID"] as? String
let receiverIDNumber = document.data()["receiverID"] as? String
let timestamp = document.data()["timestamp"] as? String
let conversationsCounter = document.data()["conversationsCounter"] as? Int
let chat = Chat(messageTextString: messageText!, senderIDNumber: senderIDNumber!, receiverIDNumber: receiverIDNumber!, timeStampString: timestamp!, conversationsCounterInt: conversationsCounter!)
self.chats.append(chat)
print(self.chats)
self.collectionView.reloadData()
}
}
}

关于如何过滤以便我的收件箱消息将显示唯一用户的任何想法?我正在使用Firebase/Firestore作为我的数据库。

听起来您正在尝试按收件人对结果进行分组。Firestore的查询API中没有这样的group by子句。您必须自己遍历所有消息,并将它们分组到客户端。

chatsRef.whereField("senderID", isEqualTo: senderIDNumber!)
.order(by: "receiverID")
.addSnapshotListener { querySnapshot, error in
...
let lastReceiverID = "";
for document in documents {
...
let receiverIDNumber = document.data()["receiverID"] as? String
if receiverIDNumber != lastReceiverId {
// TODO: do something with receiverIDNumber
}
lastReceiverId = receiverIDNumber
}

事实上,您的数据模型目前看起来像是所有用户之间有一个很长的聊天消息列表,这感觉就像是从聊天关系数据模型直接翻译而来的。

在 NoSQL 数据库中,你通常希望对数据进行建模,使其更接近应用实际需要的方式。例如,您似乎正在尝试显示给定发件人的所有邮件。在这种情况下,请考虑将这些消息存储在单独的集合中。例如,如果您已经有一个顶级/users集合,则可以将他们发送的消息放在该集合下的sent子集合中:/users/$uid/sent.

有关数据建模注意事项的更多信息,请参阅 NoSQL 数据建模和 Todd 关于 Cloud Firestore 的视频系列(第 1 集和第 2 集(。

最新更新