【发布时间】:2020-02-14 02:23:44
【问题描述】:
我正在使用 Firestore 实现聊天。 Firestore的结构如下:
|- 聊天(收藏)
|-- AutoID(文档)
|--- user1ID(字符串)
|--- user2ID(字符串)
|--- 线程(收藏)
...然后线程有更多的字段。
为了在两个用户之间进行聊天,我像这样获取它:
let db = Firestore.firestore().collection("Chats")
.whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid!)
.whereField("user2ID", isEqualTo: user2UID!)
如果用户 1 是当前用户,它可以正常工作,否则如果我从其他帐户打开聊天并且当前用户是用户 2,它不会获取此文档。
搜索后发现我可以使用arrayContains。所以我创建了一个名为users 的数组,并在其中添加了这两个ID。所以现在的结构是:
|- 聊天(收藏)
|-- AutoID(文档)
|--- 用户(数组)
|---- 0: user1ID(字符串)
|---- 1: user2ID(字符串)
|--- 线程(收藏)
...然后线程有更多的字段。
但是当我这样做时:
let db2 = Firestore.firestore().collection("Chats")
.whereField("users", arrayContains: Auth.auth().currentUser?.uid!)
.whereField("users", arrayContains: user2UID!)
它将获取它发现的第一个具有currentUser.uid 的文档(尚未对其进行测试,我是根据我阅读的文档说的)。
那么,如果一个数组包含两个 id,我怎样才能得到这个聊天?
【问题讨论】:
-
有几个很好的答案,但我的问题是,get chat between two users 是什么意思?换句话说,你会在什么时间点得到两个用户之间的聊天——两个用户都得到了吗?还是只是其中之一?它何时发生 - 当他们第一次进行身份验证时或之后的某个时间。他们是否单击“获取我的聊天”按钮,或者他们参与的聊天是否在 tableView 中提供?聊天中只有两个人还是两个以上?可能还有其他选项提供更多信息。
标签: ios swift firebase google-cloud-firestore